공든탑앱 열기

객체지향 개념과 설계 원칙

정보처리기사 · 화면·애플리케이션 설계 · 약 14분

쉽게 말하면

객체지향은 프로그램을 '물건(객체)'들의 모임으로 보는 방식이에요. 자동차 객체는 색깔·속도 같은 데이터와 달리기·멈추기 같은 기능을 함께 가져요. 클래스는 객체를 찍어 내는 틀이에요. 중요한 특징은 네 가지예요. 데이터와 기능을 하나로 묶는 캡슐화, 부모의 것을 물려받는 상속, 같은 이름으로 여러 동작을 하는 다형성, 핵심만 남기는 추상화예요.

시험용 정의

객체지향은 현실의 사물을 속성(데이터)과 메서드(연산)를 가진 객체로 보고, 객체 사이의 메시지로 프로그램을 구성하는 방식이다. 클래스는 같은 속성과 메서드를 가진 객체들의 틀이고, 클래스로 만든 실제 객체를 인스턴스라 한다. 주요 특징은 캡슐화(데이터와 연산을 묶고 내부를 감춤, 정보 은닉), 상속(상위 클래스의 속성·메서드를 하위 클래스가 물려받음), 다형성(같은 메시지에 객체마다 다르게 반응, 오버로딩·오버라이딩), 추상화(공통 성질만 뽑아냄)다. 좋은 객체지향 설계 원칙으로 SOLID가 있다.

비유로 이해하기

붕어빵 틀(클래스)과 붕어빵(인스턴스)이다. 팥·슈크림(속성)은 반죽 속에 감춰져 있고(캡슐화), 미니 붕어빵 틀은 기본 틀 모양을 물려받고(상속), '구워!'라는 같은 말에 틀마다 다르게 구워진다(다형성).

자세히

먼저 알아 둘 말

말뜻
객체속성과 메서드를 가진 하나의 대상
클래스객체의 틀. 같은 종류 객체들의 공통 정의
인스턴스클래스로 실제로 만든 객체
메시지객체에 일을 시키는 요청 (메서드 호출)
메서드객체가 하는 동작. 함수와 비슷
상위·하위 클래스물려주는 쪽(부모, 슈퍼클래스)과 받는 쪽(자식, 서브클래스)

오버로딩 vs 오버라이딩

구분오버로딩오버라이딩
위치같은 클래스 안상속 관계 (부모 → 자식)
이름같다같다
매개변수개수나 타입이 달라야 한다같아야 한다
목적비슷한 기능을 한 이름으로물려받은 동작을 자식에 맞게 바꾸기

SOLID 원칙

원칙뜻
SRP 단일 책임클래스는 하나의 책임만 가진다
OCP 개방-폐쇄확장에는 열려 있고 수정에는 닫혀 있다
LSP 리스코프 치환자식 클래스는 부모 클래스 자리에 바꿔 넣어도 문제없어야 한다
ISP 인터페이스 분리쓰지 않는 메서드에 의존하지 않도록 인터페이스를 잘게 나눈다
DIP 의존 역전구체적인 것이 아니라 추상화(인터페이스)에 의존한다

객체지향 분석 방법론

방법론특징
럼바우 (OMT)객체 모델링(정보) → 동적 모델링(상태) → 기능 모델링(자료 흐름) 순서. 그래픽 표기
부치 (Booch)미시적·거시적 개발 프로세스 모두 사용
야콥슨 (Jacobson)유스케이스를 강조
코드-요던E-R 다이어그램으로 객체의 행위를 모델링
워프스-브록분석과 설계 구분 없이 고객 명세서를 평가

기출에서 더 나온 것

말뜻
객체상태(속성)·동작(메서드)·고유 식별자를 가진 독립된 존재. 클래스들의 집합이 아니다
오버로딩이름은 같고 매개변수의 개수나 타입이 다른 메서드를 여러 개 두는 것
private같은 클래스 안에서만 쓸 수 있게 감추는 접근 제어자. '공개'가 아니다
객체지향 분석의 특징데이터와 행위를 함께 본다. 기능 중심·하향식 순차 처리는 구조적 분석의 특징
집단화 (Aggregation)여러 객체가 모여 하나의 전체를 이루는 부분-전체 관계 (자동차와 바퀴)

시험에 이렇게 나와요

확인 문제

Q1. 같은 이름의 메서드를 매개변수의 개수나 타입만 다르게 여러 개 정의하는 것은?

  1. 오버로딩
  2. 오버라이딩
  3. 캡슐화
  4. 상속
정답 보기

1번 오버로딩

오버로딩(Overloading)은 한 클래스 안에서 이름은 같고 매개변수가 다른 메서드를 여러 개 두는 것이다. 오버라이딩(Overriding)은 부모에게 물려받은 메서드를 자식이 같은 모양으로 다시 정의하는 것이다.

Q2. 럼바우(Rumbaugh) 분석 기법의 모델링 순서로 옳은 것은?

  1. 객체 → 동적 → 기능
  2. 기능 → 동적 → 객체
  3. 객체 → 기능 → 동적
  4. 동적 → 객체 → 기능
정답 보기

1번 객체 → 동적 → 기능

객체 모델링(객체 다이어그램) → 동적 모델링(상태 다이어그램) → 기능 모델링(자료 흐름도).

Q3. '소프트웨어는 확장에는 열려 있고 수정에는 닫혀 있어야 한다'는 원칙은?

  1. SRP
  2. DIP
  3. LSP
  4. OCP
정답 보기

4번 OCP

OCP(개방-폐쇄 원칙)다. SRP는 클래스 하나에 책임 하나, LSP는 자식이 부모를 대신할 수 있어야 함, DIP는 추상화에 의존해야 함이다.

Q4. 객체의 내부 데이터를 외부에서 직접 접근하지 못하게 감추는 것은?

  1. 다형성
  2. 정보 은닉
  3. 인스턴스화
  4. 상속
정답 보기

2번 정보 은닉

캡슐화로 데이터를 감추는 것이 정보 은닉이다.

Q5. 다형성에 대한 설명으로 옳은 것은?

  1. 상위 클래스는 하위 클래스를 상속받는다
  2. 데이터와 연산을 분리해 따로 관리한다
  3. 같은 메시지에 객체마다 다른 방식으로 응답할 수 있다
  4. 하나의 클래스는 하나의 객체만 만들 수 있다
정답 보기

3번 같은 메시지에 객체마다 다른 방식으로 응답할 수 있다

오버로딩·오버라이딩이 다형성을 구현한다.

헷갈리기 쉬운 O·X

오버라이딩은 같은 클래스 안에서 매개변수만 달리해 메서드를 여러 개 만드는 것이다.

정답 보기

X 그건 오버로딩.

인스턴스는 클래스를 바탕으로 실제 만들어진 객체다.

정답 보기

O

리스코프 치환 원칙은 하위 클래스가 상위 클래스를 대신해도 문제가 없어야 한다는 원칙이다.

정답 보기

O

함께 보면 좋은 개념