상태와 상태를 변경하는 행위를 하나의 객체로 묶으면, 외부에서 객체의 상태를 임의로 변경하지 못하게 하고 관련 규칙을 객체 내부에서 일관되게 관리할 수 있습니다. 이것이 캡슐화입니다. 또한 추상화와 다형성을 활용하면 사용하는 쪽은 구체적인 구현보다 역할에 의존할 수 있기 때문에, 구현을 교체하거나 기능을 확장할 때 변경 범위를 줄이는 데 도움이 됩니다.
- 캡슐화(Encapsulation) : 데이터를 외부에서 직접 접근하지 못하게 하고, 메소드를 통해서만 접근하도록 제한하는 개념입니다. 대표적으로 필드를
private으로 선언하고, 검증 로직이 포함된 메서드를 통해 상태를 변경하는 방식이 있습니다. - 상속(Inheritance) : 상속은 기존에 작성된 클래스(부모 클래스)의 속성과 기능을 새로운 클래스(자식 클래스)가 물려받아 사용할 수 있도록 하는 기능입니다.
- 다형성(Polymorphism) : 다형성은 하나의 메소드나 클래스가 다양한 형태로 동작할 수 있게 하는 성질입니다. 같은 이름의 메소드가 상황에 따라 다르게 실행되도록 하는 것으로, 대표적으로 오버라이딩(상속받은 메소드를 재정의)과 오버로딩(같은 이름의 메소드를 매개변수에 따라 여러 개 정의)이 있습니다.
- 추상화(Abstraction) : 추상화는 복잡한 시스템에서 중요한 정보만 추출하여 단순화하는 개념입니다. 대표적으로 인터페이스와 추상 클래스를 이용해 공통된 역할이나 동작을 정의하는 방식이 있습니다.
캡슐화에 대해 응집도 연관지어서 말해주세요
응집도는 하나의 모듈이나 클래스에 포함된 요소들이 하나의 책임을 중심으로 얼마나 밀접하게 연관되어 있는지를 나타냅니다. 클래스의 응집도가 높으면 관련된 데이터와 동작이 한곳에 모이기 때문에, 이를 외부에 직접 노출하지 않고 필요한 기능만 메서드로 제공하기 쉬워집니다. 즉, 높은 응집도는 캡슐화를 잘 적용하기 좋은 구조를 만들며, 캡슐화를 통해 외부에서는 내부 구현을 몰라도 공개된 인터페이스만으로 객체를 사용할 수 있습니다.