객체지향

객체지향의 4대요소

정재익 2026. 1. 4. 00:53

추상화, 상속, 캡슐화, 다형성

1. 추상화
공통성과 본질을 모아 추출한다.
추상 클래스와 인터페이스로 구현가능하다.
어떠한 객체가 수행해야하는 핵심적인 역할만 추상 메소드로 만든다.

예를들면 차량 인터페이스와 자동차, 오토바이 구현체가 있을때 시동, 전진, 후진의 공통기능을 뽑아 추상 메소드에 등록한다.

이를 객체지향프로그래밍에서 역할과 구현의 분리라고 한다.

2. 상속
기존의 클래스를 재활용하여 새로운 클래스를 작성한다.
상위 클래스를 확장한 하위 클래스들이 상위 클래스의 속성과 기능을 사용할 수 있다.

예를들면 차량 클래스를 상속받은 자동차, 오토바이 클래스가 있을 때 시동, 전진과 후진은 차량 클래스의 메서드를 이용하고 창문을 내리는 자동차 고유의 기능은 자동차 클래스가 구현한다.

3. 다형성
객체의 속성이나 기능이 맥락에 따라 다른 기능을 수행할 수 있는 것이다.
프로그래밍 적으로는 한 타입의 참조 변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것이다. 구체적으로 상위 클래스 타입의 참조변수로 하위 클래스를 참조하는 것이 가능하다.
오버라이딩과 오버로딩으로 구현 가능하다.

어떠한 객체가 다른 객체의 속성과 기능에 접근하여 어떤 기능을사용할 때 A클래스는 B클래스에 의존한다고 한다.

만약 운전자 클래스의 운전 메서드가 자동차 객체와 오토바이 객체에 둘 다 의존하고 있으면 운전자 클래스는 자동차 클래스와 오토바이 클래스에 의존하고 있다고 한다.

이렇게 직접적인 관계를 가지고 있는 것을 객체간의 결합도가 높다고한다. 객체지향 설계를 하는데 불리하다.

예를들어 운전 메서드에 버스 객체, 트럭 객체등 많은 객체가 추가되면 그때마다 오버로딩을 해야한다.

그리고 오토바이 객체가 스쿠터로 변경되면 운전자 클래스에도 변경이 일어난다. 이것은 변경에 유연한 애플리케이션이 목표인 객체지향과 거리가 멀다.

운전자 클래스에 차량 인터페이스만 의존하게하면 어떤 변경이 일어나도 운전자 클래스를 수정 할 필요 없다.
또한 운전자 클래스는 오직 인터페이스를 통해서만 간접적으로 자동차, 오토바이 구현체에 접근하기 때문에 결합도가 낮아진다.

하지만 실행 클래스에서 객체를 생성할 때 객체에 의존하기 때문에 실행 클래스의 결합도가 높아지는데 이것을 해결하기 위해 의존관계 주입이 등장했다.

4. 캡슐화
클래스 내부의 연관있는 속성과 기능들을 하나의 캡슐로 만들어 외부로부터 보호 및 은닉한다.
데이터 보호 - 외부로부터 클래스에 정의된 속성과 기능을 보호한다.
데이터 은닉 - 내부의 동작을 감추고 외부에는 필요한 부분만 노출한다.

접근제어자와 게터/세터로 구현가능하다.
접근제어자로 외부의 침입을 막는다.
외부에서 접근을 허가할 속성만 게터와/세터로 열어준다.

운전자클래스에서 자동차클래스의 메서드 여러개를 호출할 때 캡슐화가 되어있지않으면 운전자 클래스는 자동차 클래스의 내부를 너무 잘 알고있는 상태가되고 결합도가 높다고한다.

자동차 클래스의 메서드를 프라이빗으로하고 노출할 메서드 하나만 프라이빗의 메서드들을 묶어서 퍼블릭으로 두면 운전자 클래스는 자동차 클래스에 대해 하나의 메서드만 알고있어도 된다.

캡슐화는 객체 내부의 동작의 외부노출을 최소화하여 각 객체의 자율성을 높이고 이를 통해 객체간 결합도를 낮출 수 있다.








'객체지향' 카테고리의 다른 글

익명 클래스  (0) 2025.12.30
DI  (0) 2025.12.30
SOILD  (1) 2025.12.21
의존관계 주입  (0) 2025.12.21
제어의 역전  (0) 2025.12.21