Programming Languages/Java

[JAVA] 자바의 컴포넌트 - 자바 빈(Bean) 조건과 필요성

Hannana. 2024. 7. 30. 00:57
728x90
반응형

 

재사용성을 높이기 위한 방법으로 인스턴스를 꼽았었다.

이것을 조금 더 큰 덩어리, 즉 컴포넌트로도 활용이 가능하다. (자바의 클래스를 컴포넌트화)

자바에서는 재사용을 위한 컴포넌트를 자바 빈(Bean)이라고 부른다.

 

 

 

 

1. 자바 빈(Bean) 조건



💡 [ JavaBean 조건 ]

  1. public class
  2. public 생성자() : 매개변수 없어야 함
  3. property용 멤버변수(멤버필드)는 public이면 안됨
  4. property용 public setXXX/getXXX 메소드가 필요 

 

 

이 형태를 취해야 클래스가 자바 빈의 형태를 띄게 된다.

 

 

 

2. 자바 빈(Bean) 필요성

 

그냥 인스턴스 만들어 쓰는 것으론 부족할까?

다 이유가 있다. 

그 중 하나가 바로,

 

■ 필터링 기능 (in 제공자 관점)

 

-Case1 : 나쁜 케이스 

 

아무리 해당 변수를 public 멤버변수로 바꾸더라도

직접 값을 넣었기 때문에 필터링이 불가능하다.

 

 

-Case2 : 좋은 케이스

 

Product클래스(vo)에서 setter 시 필터링을 해주자.

 

⇒ 아예 잘못된 값의 접근을 막아버리는 것. "이렇게 접근하지마." 라는 의미.

사용자가 실수하지 않도록 제공자는

  • 제공 자료 노출 안하고,
  • 메소드 통해 필터링 해야 한다!

사용자 쪽 코드에서 필터링? → 재사용성 떨어지는 것.

무조건 사용자가 편해야.

 

 

 

 

다음 코드는 전체 제품 목록을 반환하는 메서드다.

이 때, 저장소 전체를 불러오지 않고 애초에 있는 만큼만 불러오는 필터링을 사용해야 안전하다!

 

이게 무슨 말일까?

어차피 전체를 출력하는데 굳이 필터링을 할 것이 있나 싶고, 오히려 배열을 새로 생성해서 복사하는 작업이 더 비효율적이지 않나, 하는 생각이 들었지만 위와 같은 방식을 사용한 이유는 다음과 같다.

 

  1. 데이터 보호 
    원본 배열을 직접 반환하면 외부 코드가 이 배열을 변경할 수 있다. 예를 들어, 반환된 배열의 요소를 수정하거나 제거할 수 있는데, 이렇게 되면 원본 배열의 데이터가 손상될 수 있다. 복사본을 반환하면 원본 데이터는 보호된다.
  2. 불변성 유지
    배열의 불변성을 유지할 수 있다. 외부에서 배열을 수정하더라도 원본 배열은 변경되지 않는다. 이는 데이터 무결성을 보장하는 중요한 방법이다.
  3. 안전한 동시성 처리
    다중 스레드 환경에서 한 스레드가 배열을 읽는 동안 다른 스레드가 배열을 변경하면 문제가 발생할 수 있다. 복사본을 반환하면 이런 문제를 피할 수 있다. 



💡 여기서의 "오버헤드"는 주로 성능 문제보다는 코드의 안전성과 데이터 무결성을 유지하기 위한 고려사항임

 

=> 다시 말해, 원본 배열을 직접 반환하는 대신 복사본을 만들어서 반환하는 방식으로
데이터의 무결성을 보장하는 것이다.

 

 

 

 


 

결국에는 사용자 코드의 최적화를 이끄는 방법론 중 하나인 것이다.

자바 빈의 형태로 코드를 조금 더 효율적이고 OOP스럽게 활용해보는 것이 숙제이겠다.

 

 

 

 

반응형