※ 캡슐화
항상 요구사항은 변경된다. 따라서 요구사항의 변경을 당연하게 받아들이고 이에 대처하는 법을 터득해야 한다. 이를 대처하는 방법이 낮은 결합도와 높은 응집도를 유지하는 것이다.
- 결합도 : 어떤 기능을 실행하는 데 다른 클래스나 모듈들에 얼마나 의존적인지를 나타낸다.
- 응집도 : 클래스나 모듈 안의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타낸다.
캡슐화는 특히 낮은 결합도를 유지할 수 있도록 해주는 객체지향 설계 원리다. 캡슐화는 정보은닉(알 필요가 없는 정보는 외부에서 접근하지 못하도록 제한)을 통해 높은 응집도와 낮은 결합도를 갖는다.
ex) 스마트폰을 충전하는 방식은 알더라도 내부에서 어떻게 충전되는 지 알 필요가 없다.
*정보 은닉의 필요성 : 소프트웨어는 결합이 많을수록 문제가 발생한다. 결합이 많은 클래스들이 있다면 하나의 클래스에 변경이나 오류가 생기면 결합된 다른 클래스에도 오류가 발생할 확률이 높다. 이런 결합을 줄이는 방법 중 하나가 정보은닉이다.
ex) 입력된 숫자들의 가장 큰 수를 구하는 프로그램
class ResultMax{ public int[] array; public int size; public ResultMax(int size){ this.size = size; array = new array[size]; } public void Sort(){ ...... 정렬 후 마지막 인덱스가 가장 큰수 } } public class Main{ public static void main(String[] args){ ResultMax rm = new ResultMax(3); rm.array[0] = 1; rm.array[1] = 2; rm.array[3] = 3; rm.Sort(); Sysout(rm[3]); } }
만약 위의 array객체가 성능 향상을 위해서 int형 배열이 아닌 ArrayList로 바꾼다면 Main 부분의 코드 전반적인 부분을 변경해야 한다. array 객체를 private로 정보은닉을 하고 따로 ResultMax 클래스 안 변수에 숫자를 추가해 주는 add()함수를 별도로 구현한다면 코드의 결합도가 낮아질 것이다.
public class Main{ public static void main(String[] args){ ResultMax rm = new ResultMax(); rm.add(1); rm.add(2); rm.add(3); rm.Sort(); Sysout(rm.result()); } }
위 코드와 같이 add(), result() 함수를 사용하면 array의 자료 구조가 어떻게 변경되든지 간에 상관이 없어진다. 즉, 정보은닉을 이용한 캡슐화를 통해 코드의 결합이 낮아지는 것이다.
'자바 > 기본' 카테고리의 다른 글
이클립스 단축키, 자바 기타 (0) | 2017.06.29 |
---|---|
객체지향 원리(4) - 다형성, 피터 코드의 상속 규칙 (0) | 2017.06.29 |
객체지향 원리(3) - 일반화(상속) (0) | 2017.06.29 |
객체지향 원리(1) - 추상화 (0) | 2017.06.29 |
SOLID 원칙 - 예제 (0) | 2017.06.15 |