• 캡슐화의 정의 
    • 필요한 속성(Attribute)과 행위(Method) 하나로 묶고 그중 일부를 외부에서 사용하지 못하도록 은닉한다 이다.

    • 간단한 예로 캡슐화를 설명하자면 음료수 자판기가 있다고 해보자.
    • 우선 필요한 속성(Attribute)와 행위(Method) 묶는 예시를 보자.
  • 속성(Attribute, 음료수 목록)는
      1. 가격
      2. 선택한 음수
      3. 사용자 입금 가격
    
    행위(Method)는
      1. 음료수 있는지 확인
      2. 잔액 확인
      3. 음료수 선택
      4. 잔액 반환

     

  • 먼저 캡슐화하지 않고 모든 클래스 method, attribute public으로정의하면 이를 실행하는 Client 클래스에서는 public 으로 선언하였기 떄문에 모든 객체에 접근이 가능하다.

  • 이때 몇가지 문제가 생긴다.
    • 협업 시다른 개발자가 자판기 클래스를 호출해서 사용한다 했을 때 만약 음료수를 추가한다고 가정하자. 

    • 현재는 콜라, 사이다, 환타가지 음료만 존재 하지만 추후에는 콜라,사이다,환타,포카리,핫식스 5가지로 늘릴 예정이다.

    • 그렇다면 자판기 클래스를 사용하는 모든 클래스는 수정이 필요하며 이는 프로그램상 오류를 일으킬 확률이 높다.
  • 객체지향에 나오는 항상 등장하는 말이 있는데 응집도는 강하게, 결합도는 약하게 이다.
    • 이는 모듈을 각각 독립적으로 적용할  있도록 응집도가 강해야 하고 다른 모듈을 참조하는 결합도는 낮아야 한다.

    • 이는 캡슐화와 관계가 있다. 모든걸 public으로 선언 시 음료수 머신의 결합도가 강해진다.

    • 다시 말하면, 모듈이 변경될 때마다 다른 클래스에서도 수정이 필요하다.

    • 이는 유지보수 시에 치명적으로 단점이 된다. 따라서 외부에서는 음료수 확인하는 정도의 메서드만 public으로 선언하고 추가하는 method private으로 선언하여 다른 모듈에서 접근을   없게 막아야 한다.
       
  • 이와 같이객체지향 프로그램은 모듈화, 캡슐화를 통해 적절하게 사용할 경우 프로그램 변경 요청 시 적은 양의 코딩으로 프로그램 수정이 가능하다.

'JAVA' 카테고리의 다른 글

추상화, 상속, 객체지향의 장점  (0) 2020.08.11
다형성이란?  (0) 2020.08.11
빌드 도구, Maven 이란?  (0) 2020.08.08
GC(Garbage Collector)이란?  (0) 2020.08.07
JVM 이란?  (0) 2020.08.07

+ Recent posts