- 캡슐화의 정의
- 필요한 속성(Attribute)과 행위(Method)를 하나로 묶고 그중 일부를 외부에서 사용하지 못하도록 은닉한다 이다.
- 간단한 예로 캡슐화를 설명하자면 음료수 자판기가 있다고 해보자.
- 우선 필요한 속성(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 |