객체지향 개념과 설계 원칙
쉽게 말하면
객체지향은 프로그램을 '물건(객체)'들의 모임으로 보는 방식이에요. 자동차 객체는 색깔·속도 같은 데이터와 달리기·멈추기 같은 기능을 함께 가져요. 클래스는 객체를 찍어 내는 틀이에요. 중요한 특징은 네 가지예요. 데이터와 기능을 하나로 묶는 캡슐화, 부모의 것을 물려받는 상속, 같은 이름으로 여러 동작을 하는 다형성, 핵심만 남기는 추상화예요.
시험용 정의
객체지향은 현실의 사물을 속성(데이터)과 메서드(연산)를 가진 객체로 보고, 객체 사이의 메시지로 프로그램을 구성하는 방식이다. 클래스는 같은 속성과 메서드를 가진 객체들의 틀이고, 클래스로 만든 실제 객체를 인스턴스라 한다. 주요 특징은 캡슐화(데이터와 연산을 묶고 내부를 감춤, 정보 은닉), 상속(상위 클래스의 속성·메서드를 하위 클래스가 물려받음), 다형성(같은 메시지에 객체마다 다르게 반응, 오버로딩·오버라이딩), 추상화(공통 성질만 뽑아냄)다. 좋은 객체지향 설계 원칙으로 SOLID가 있다.
비유로 이해하기
붕어빵 틀(클래스)과 붕어빵(인스턴스)이다. 팥·슈크림(속성)은 반죽 속에 감춰져 있고(캡슐화), 미니 붕어빵 틀은 기본 틀 모양을 물려받고(상속), '구워!'라는 같은 말에 틀마다 다르게 구워진다(다형성).
자세히
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| 객체 | 속성과 메서드를 가진 하나의 대상 |
| 클래스 | 객체의 틀. 같은 종류 객체들의 공통 정의 |
| 인스턴스 | 클래스로 실제로 만든 객체 |
| 메시지 | 객체에 일을 시키는 요청 (메서드 호출) |
| 메서드 | 객체가 하는 동작. 함수와 비슷 |
| 상위·하위 클래스 | 물려주는 쪽(부모, 슈퍼클래스)과 받는 쪽(자식, 서브클래스) |
오버로딩 vs 오버라이딩
| 구분 | 오버로딩 | 오버라이딩 |
|---|---|---|
| 위치 | 같은 클래스 안 | 상속 관계 (부모 → 자식) |
| 이름 | 같다 | 같다 |
| 매개변수 | 개수나 타입이 달라야 한다 | 같아야 한다 |
| 목적 | 비슷한 기능을 한 이름으로 | 물려받은 동작을 자식에 맞게 바꾸기 |
SOLID 원칙
| 원칙 | 뜻 |
|---|---|
| SRP 단일 책임 | 클래스는 하나의 책임만 가진다 |
| OCP 개방-폐쇄 | 확장에는 열려 있고 수정에는 닫혀 있다 |
| LSP 리스코프 치환 | 자식 클래스는 부모 클래스 자리에 바꿔 넣어도 문제없어야 한다 |
| ISP 인터페이스 분리 | 쓰지 않는 메서드에 의존하지 않도록 인터페이스를 잘게 나눈다 |
| DIP 의존 역전 | 구체적인 것이 아니라 추상화(인터페이스)에 의존한다 |
객체지향 분석 방법론
| 방법론 | 특징 |
|---|---|
| 럼바우 (OMT) | 객체 모델링(정보) → 동적 모델링(상태) → 기능 모델링(자료 흐름) 순서. 그래픽 표기 |
| 부치 (Booch) | 미시적·거시적 개발 프로세스 모두 사용 |
| 야콥슨 (Jacobson) | 유스케이스를 강조 |
| 코드-요던 | E-R 다이어그램으로 객체의 행위를 모델링 |
| 워프스-브록 | 분석과 설계 구분 없이 고객 명세서를 평가 |
기출에서 더 나온 것
| 말 | 뜻 |
|---|---|
| 객체 | 상태(속성)·동작(메서드)·고유 식별자를 가진 독립된 존재. 클래스들의 집합이 아니다 |
| 오버로딩 | 이름은 같고 매개변수의 개수나 타입이 다른 메서드를 여러 개 두는 것 |
| private | 같은 클래스 안에서만 쓸 수 있게 감추는 접근 제어자. '공개'가 아니다 |
| 객체지향 분석의 특징 | 데이터와 행위를 함께 본다. 기능 중심·하향식 순차 처리는 구조적 분석의 특징 |
| 집단화 (Aggregation) | 여러 객체가 모여 하나의 전체를 이루는 부분-전체 관계 (자동차와 바퀴) |
시험에 이렇게 나와요
- 데이터와 함수를 하나로 묶고 필요한 것만 밖에 보이기 → 캡슐화 (정보 은닉과 가장 밀접)
- 상위 클래스의 속성·연산을 물려받음 → 상속 / 같은 클래스의 개별 객체 → 인스턴스 / 객체에 일을 시키는 명령 → 메시지
- 부분-전체 관계 → 집단화(Aggregation)
- 럼바우 분석 → 객체 → 동적 → 기능 모델링 순서. 동적은 상태 다이어그램, 기능은 DFD
- SOLID → 하위 클래스가 상위를 대신할 수 있어야 LSP, 확장엔 열고 변경엔 닫는 OCP
- 객체지향 분석 방법론 → 코드-요던(E-R 다이어그램으로 행위 모델링), 부치, 야콥슨(유스케이스), 워프스-브록
확인 문제
Q1. 같은 이름의 메서드를 매개변수의 개수나 타입만 다르게 여러 개 정의하는 것은?
- 오버로딩
- 오버라이딩
- 캡슐화
- 상속
정답 보기
1번 오버로딩
오버로딩(Overloading)은 한 클래스 안에서 이름은 같고 매개변수가 다른 메서드를 여러 개 두는 것이다. 오버라이딩(Overriding)은 부모에게 물려받은 메서드를 자식이 같은 모양으로 다시 정의하는 것이다.
Q2. 럼바우(Rumbaugh) 분석 기법의 모델링 순서로 옳은 것은?
- 객체 → 동적 → 기능
- 기능 → 동적 → 객체
- 객체 → 기능 → 동적
- 동적 → 객체 → 기능
정답 보기
1번 객체 → 동적 → 기능
객체 모델링(객체 다이어그램) → 동적 모델링(상태 다이어그램) → 기능 모델링(자료 흐름도).
Q3. '소프트웨어는 확장에는 열려 있고 수정에는 닫혀 있어야 한다'는 원칙은?
- SRP
- DIP
- LSP
- OCP
정답 보기
4번 OCP
OCP(개방-폐쇄 원칙)다. SRP는 클래스 하나에 책임 하나, LSP는 자식이 부모를 대신할 수 있어야 함, DIP는 추상화에 의존해야 함이다.
Q4. 객체의 내부 데이터를 외부에서 직접 접근하지 못하게 감추는 것은?
- 다형성
- 정보 은닉
- 인스턴스화
- 상속
정답 보기
2번 정보 은닉
캡슐화로 데이터를 감추는 것이 정보 은닉이다.
Q5. 다형성에 대한 설명으로 옳은 것은?
- 상위 클래스는 하위 클래스를 상속받는다
- 데이터와 연산을 분리해 따로 관리한다
- 같은 메시지에 객체마다 다른 방식으로 응답할 수 있다
- 하나의 클래스는 하나의 객체만 만들 수 있다
정답 보기
3번 같은 메시지에 객체마다 다른 방식으로 응답할 수 있다
오버로딩·오버라이딩이 다형성을 구현한다.
헷갈리기 쉬운 O·X
오버라이딩은 같은 클래스 안에서 매개변수만 달리해 메서드를 여러 개 만드는 것이다.
정답 보기
X 그건 오버로딩.
인스턴스는 클래스를 바탕으로 실제 만들어진 객체다.
정답 보기
O
리스코프 치환 원칙은 하위 클래스가 상위 클래스를 대신해도 문제가 없어야 한다는 원칙이다.
정답 보기
O