1. 캡슐화란?
캡슐화는 객체지향 프로그래밍의 핵심 개념 중 하나로, 데이터와 그 데이터를 처리하는 행위를 하나로 묶고 외부에 드러내지 않는 것을 의미합니다. 이를 통해 객체는 외부에서 직접 접근할 수 없고, 대신 특정 행위를 '요청'하여 수행할 수 있습니다.
캡슐화의 이점
1.
단순화된 객체 협력:
•
예를 들어, 자동차 게임에서 자동차를 움직이고 싶을 때, 자동차 객체의 내부 구조를 알 필요 없이 move() 메서드만 호출하면 됩니다. 이는 코드의 간결함과 가독성을 높여줍니다. 이러한 행위 요청을 "객체에 메시지를 보낸다"라고 표현하기도 합니다.
2.
코드 변경의 최소화:
•
내부 로직이 변경되더라도 외부 코드는 변경할 필요가 없습니다. 외부는 단지 요청만 하기 때문에, 내부 구현이 어떻게 되어 있는지 알 필요가 없기 때문입니다.
3.
데이터 보호:
•
내부 데이터가 예상치 못하게 변경되는 것을 막을 수 있습니다. 이는 코드의 안정성을 높이고, 예기치 않은 버그를 줄여줍니다.
캡슐화를 지키는 방법
•
필드를 private으로 설정:
◦
클래스의 필드를 private으로 설정하여 외부에서 직접 접근하지 못하게 합니다.
•
setter 메서드의 사용을 지양:
◦
가능하면 setter 메서드를 만들지 않음으로써 외부에서 내부 데이터를 직접 변경하지 못하게 합니다. 대신 필요한 경우 getter 메서드나 필요한 동작을 수행하는 메서드를 제공합니다.
예제 코드
public class Car {
private int position;
public Car() {
this.position = 0;
}
public void move() {
this.position++;
}
public int getPosition() {
return position;
}
}
Java
복사
위 예시에서 Car 클래스의 position 필드는 private으로 설정되어 외부에서 직접 접근할 수 없습니다. 대신 move() 메서드를 통해 자동차를 움직일 수 있으며, getPosition() 메서드를 통해 현재 위치를 확인할 수 있습니다. 이렇게 하면 내부 구현을 숨기고, 외부에서는 단지 메시지를 보내어 행위를 요청할 수 있게 됩니다.
캡슐화는 코드의 복잡성을 줄이고, 유지보수성을 높이는 중요한 원칙입니다. 이를 통해 보다 견고하고 확장 가능한 시스템을 구축할 수 있습니다.
2. instanceOf을 자제하라
instanceof 을 사용하면 코드가 특정 클래스나 타입에 의존하게 됩니다. 이는 유연성이 떨어지며, 새로운 클래스나 타입이 추가될 때 기존 코드를 변경해야 할 수 있습니다.