재사용성을 높이기 위한 방법으로 인스턴스를 꼽았었다.
이것을 조금 더 큰 덩어리, 즉 컴포넌트로도 활용이 가능하다. (자바의 클래스를 컴포넌트화)
자바에서는 재사용을 위한 컴포넌트를 자바 빈(Bean)이라고 부른다.
1. 자바 빈(Bean) 조건
💡 [ JavaBean 조건 ]
- public class
- public 생성자() : 매개변수 없어야 함
- property용 멤버변수(멤버필드)는 public이면 안됨
- property용 public setXXX/getXXX 메소드가 필요
이 형태를 취해야 클래스가 자바 빈의 형태를 띄게 된다.
2. 자바 빈(Bean) 필요성
그냥 인스턴스 만들어 쓰는 것으론 부족할까?
다 이유가 있다.
그 중 하나가 바로,
■ 필터링 기능 (in 제공자 관점)
-Case1 : 나쁜 케이스
아무리 해당 변수를 public 멤버변수로 바꾸더라도
직접 값을 넣었기 때문에 필터링이 불가능하다.
-Case2 : 좋은 케이스
Product클래스(vo)에서 setter 시 필터링을 해주자.
⇒ 아예 잘못된 값의 접근을 막아버리는 것. "이렇게 접근하지마." 라는 의미.
사용자가 실수하지 않도록 제공자는
- 제공 자료 노출 안하고,
- 메소드 통해 필터링 해야 한다!
사용자 쪽 코드에서 필터링? → 재사용성 떨어지는 것.
무조건 사용자가 편해야.
다음 코드는 전체 제품 목록을 반환하는 메서드다.
이 때, 저장소 전체를 불러오지 않고 애초에 있는 만큼만 불러오는 필터링을 사용해야 안전하다!
이게 무슨 말일까?
어차피 전체를 출력하는데 굳이 필터링을 할 것이 있나 싶고, 오히려 배열을 새로 생성해서 복사하는 작업이 더 비효율적이지 않나, 하는 생각이 들었지만 위와 같은 방식을 사용한 이유는 다음과 같다.
- 데이터 보호
원본 배열을 직접 반환하면 외부 코드가 이 배열을 변경할 수 있다. 예를 들어, 반환된 배열의 요소를 수정하거나 제거할 수 있는데, 이렇게 되면 원본 배열의 데이터가 손상될 수 있다. 복사본을 반환하면 원본 데이터는 보호된다. - 불변성 유지
배열의 불변성을 유지할 수 있다. 외부에서 배열을 수정하더라도 원본 배열은 변경되지 않는다. 이는 데이터 무결성을 보장하는 중요한 방법이다. - 안전한 동시성 처리
다중 스레드 환경에서 한 스레드가 배열을 읽는 동안 다른 스레드가 배열을 변경하면 문제가 발생할 수 있다. 복사본을 반환하면 이런 문제를 피할 수 있다.
💡 여기서의 "오버헤드"는 주로 성능 문제보다는 코드의 안전성과 데이터 무결성을 유지하기 위한 고려사항임
=> 다시 말해, 원본 배열을 직접 반환하는 대신 복사본을 만들어서 반환하는 방식으로
데이터의 무결성을 보장하는 것이다.
결국에는 사용자 코드의 최적화를 이끄는 방법론 중 하나인 것이다.
자바 빈의 형태로 코드를 조금 더 효율적이고 OOP스럽게 활용해보는 것이 숙제이겠다.
'Programming Languages > Java' 카테고리의 다른 글
[JAVA] 절차지향 언어와 가장 큰 차이점 (0) | 2024.07.29 |
---|---|
[JAVA] 자바 컴파일 특징을 JDK 구성 요소를 통해 알아보자 (0) | 2024.07.28 |
[JAVA] 자바 기본형 타입 종류와 크기 (0) | 2024.06.27 |
[JAVA] BufferedReader, BufferedWriter 사용해야 하는 이유 (0) | 2024.06.20 |
[Java] 자바 상속 구현 / extends, implements의 차이? / 개념과 사용법 정리 (1) | 2024.02.08 |