캡슐화란 무엇인가?
캡슐화는 객체지향 프로그래밍(OOP)에서 구체적인 것을 숨기고, 추상적인 것만을 드러내는 개념입니다. 이를 통해 클라이언트 객체(Client)가 세부적인 구현에 의존하지 않게 하여, 변경에 유연한 코드를 작성할 수 있도록 도와줍니다.
+) 구체적인 것&추상적인 것은 낮은 수준&높은 수준이라고 부르기도 함. DIP!!
클라이언트 객체란?
클라이언트 객체는 협력 과정에서 요청을 보내는 객체를 의미합니다. 캡슐화를 통해 클라이언트 객체가 구체적인 구현에 의존하지 않게 하여, 변경의 전파를 막는 것이 핵심입니다.
캡슐화의 목적
캡슐화의 목적은 구체적인 것을 Client 객체로부터 숨겨 변경이 Client 객체에 전파되지 않도록 하여 시스템을 유연하게 만드는 데 있습니다. 이를 통해 낮은 결합도를 구현할 수 있으며, 이는 객체 사이의 의존성이 변경될 때 그 영향이 최소화되는 구조를 말합니다.
+) 상속, 추상화, 다형성은 이러한 캡슐화를 실현하는 도구입니다. 객체지향의 핵심은 객체들 간의 협력 관계를 설정하는 것이며, 이 과정에서 의존성은 불가피합니다. 그러나 이 의존성이 변경을 전파하지 않도록 최소화하는 것이 중요합니다.
캡슐화를 위한 단계
- 변경될 가능성이 높은 것과 그렇지 않은 것을 분리하라.
- 구체적인 것을 가능한 늦게 결정하라. 구체적인 것이 아직 결정되지 않은 상태라면 Client 객체가 그 구체적인 것에 의존할 수 없다.
실전 노하우
객체지향 프로그래밍에서 협력하는 코드, 즉 Client 객체의 코드를 먼저 작성하는 것이 유리합니다. 협력 관계를 먼저 정의하고 필요한 메서드를 호출하는 코드를 작성한 후, 메서드 구현은 나중에 하면서 구체적인 것들을 점진적으로 결정하는 방식입니다.
의존성 관리와 추상화
Client 객체가 구체적인 것에 의존하지 않도록 하기 위해, 추상화된 상위 타입을 만들어 이를 의존하도록 하는 것이 중요합니다. 이 추상화된 타입을 통해 더 높은 수준의 캡슐화가 가능해집니다.
타입 계층과 다형성
타입 계층은 상속과 인터페이스 구현을 통해 만들 수 있으며, 이는 다형성의 기반이 됩니다. 다형성은 동적 바인딩을 통해 구현되고, 다형성은 캡슐화를 실현하는 중요한 수단입니다. 이를 통해 Client 객체는 추상화된 타입을 의존하고, 다양한 구현체가 그 역할을 수행할 수 있게 됩니다.
의존성 주입과 다형성
Client 객체가 추상화된 타입에 의존하고 이를 통해 다형성을 실현하려면 의존성 주입이 필수적입니다. 이를 통해 구체적인 구현을 외부에서 주입받음으로써, 구체적인 것에 대한 의존성을 제거하고 변경에 유연한 시스템을 만들 수 있습니다.
'JAVA' 카테고리의 다른 글
큰수 만들기 (1) | 2024.10.02 |
---|---|
읽기 쉬운 코드 만들기 with 세션 (2 / 2) (3) | 2024.10.01 |
읽기 쉬운 코드 만들기 with 세션 (1 / 2) (0) | 2024.09.30 |
JVM 동작 방식 (0) | 2024.09.20 |
UncheckedException과 CheckedException (1) | 2024.09.13 |
ArrayList는 어떻게 크기가 조절될까? (0) | 2024.09.11 |
Garbage Collection(GC) 더 자세히 살펴보기 (0) | 2024.09.09 |
Java final과 불변성 (0) | 2024.09.08 |