Last updated: 2022. 03. 03.
객체 지향
객체 지향(Object Oriented) 개념
객체 지향은 실세계의 개체를 속성과 메서드가 결합한 형태의 객체로 표현하는 기법이다.
객체 지향 구성요소
구성요소 | 설명 |
---|---|
클래스(Class) | - 특정 객체 내에 있는 변수와 메서드를 정의하는 일종의 틀 - 객체 지향 프로그래밍에서 데이터를 추상화하는 단위 - 하나 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현 - 속성은 변수의 형태로, 행위는 메서드 형태로 선언 |
객체(Object) | - 물리적, 추상적으로 자신과 다른 것을 식별 가능한 대상 - 클래스에서 정의한 것을 토대로 메모리에 할당됨 - 객체마다 각각의 상태와 식별성을 가짐 |
메서드(Method) | - 클래스로부터 생성된 객체를 사용하는 방법 - 객체가 메시지를 받아 실행해야 할 객체의 구체적인 연산 - 전통적 시스템의 함수(Function) 또는 프로서지(Procedure)에 해당하는 연산 기능 |
메시지(Message) | - 객체 간 상호 작용을 하기 위한 수단 - 객체에게 어떤 행위를 하도록 지시하는 방법 - 객체 간의 상호 작용은 메시지를 통해 이루어짐 - 메시지는 객체에서 객체로 전달됨 |
인스턴스(Instance) | - 객체 지향 기법에서 클래스를 통해 만든 실제의 실형 객체 - 실제로 메모리상에 할당 - 객체 지향 기법에서 같은 클레스에 속한 각각의 객체를 의미 |
속성(Property) | - 한 클래스 내에 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의 - 성질, 분류, 식별, 수량, 현재 상태 등에 대한 표현 값 |
객체 지향 기법
기법 | 설명 |
---|---|
캡슐화(Encapsulation) | - 서로 연관된 데이터와 함수를 함께 묶어 외부와 경계를 만들고 필요한 인터페이스만을 밖으로 드러내는 기법 - 결합도가 낮아지고 재사용이 용이 - 인터페이스가 단순화 됨 - 정보 은닉과 관계가 깊음 - 변경 발생 시 오류의 팍브 효과가 적음 |
상속성(Inheritance) | - 상위 클래스의 속성과 메서드를 하위 클래스에서 재정의 없이 물려받아 사용하는 기법 |
다형성(Polymorphism) | - 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력 - 상속받은 여러 개의 하위 객체들이 다른 형태의 특성을 갖는 객체로 이용될 수 있는 성질 - 오버로딩, 오버라이딩이 대표적 |
추상화(Abstraction) | - 공통 성질을 추출하여 추상 클래스를 설정하는 기법 - 과정 추상화, 자료 추상화, 제어 추상화 |
정보 은닉(Information Hiding) | - 코드 내부 데이터와 메서드를 숨기고 공개 인터페이스를 통해서만 접근이 가능하도록 하는 코드 보안 기술 - 필요하지 않은 정보는 접근할 수 없도록 하여 한 모듈 또는 하부 시스템이 다른 모듈의 구현에 영향을 받지 않게 설계됨(고려되지 않은 영향인 Side-Effect 들을 최소화) - 모듈 내부의 자료 구조와 접근 동작들에만 수정을 국한하지 않기 때문에 요구사항 등 변화에 따른 수정이 가능 - 모듈 사이의 독립성을 유지하는 데 도움을 줌 - 설계에서 은닉되어야 할 기본 정보로는 IP 주소와 같은 물리적 코드, 상세 데이터 구조 등이 존재 |
관계성(Relationship) | - 두 개 이상의 엔터티 형에서 데이터를 참조하는 관계를 나타내는 기법 - 종류로는 연관화, 분류화, 집단화, 일반화, 특수화가 있음 - 연관화 - is-member-of 관계 - 클래스와 객체의 참조 및 이용관계 - 같은 계층에 속하는 클래스들 사이의 상호 의존성을 보여주는 비계층적 관계성을 나타냄 - 집단화 - is part of 관계, part-whole 관계 - 서로 관련 있는 여러 개의 객체를 묶어 한 개의 상위 객체를 만드는 특징이 있음 - 일반화와 달리 상위 클래스의 성질들이 하위 클래스로 상속 되지는 않음 - 분류화 - is-instance-of 관계 - 공통된 속성에 의해 정의된 객체 구성원들의 인스턴스 - 일반화 - is-a 관계 - 클래스들 간의 개념적인 포함 관계 - 상위 클래스의 특성을 하위 클래스가 상속받음 - 특수화 - is-a 관계 - 상위 클래스의 특성들을 상속받으면서 하위 클래스에서 나름대로 수정을 가하고 자기 자신의 고유한 특성을 갖는 관계 |
객체 지향 설계 원칙(SOLID)
원칙 | 설명 |
---|---|
단일 책임의 원칙(Single Responsibility Principle) | - 하나의 클래스는 하나의 목적을 위해서 생성되며, 클래스가 제공하는 모든 서비스는 하나의 책임을 수행하는 데 집중되어 있어야 한다는 원칙 - 객체 지향 프로그래밍의 5원칙 중 나머지 4원칙의 기초 원칙 |
개방 폐쇄 원칙(Open Close Principle) | - 소프트웨어의 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야 한다는 원칙 |
리스코프 치환의 원칙(Liskov Substitution Principle) | - 서브 타입(상속받은 하위 클래스)은 어디서나 자신의 기반 타입(상위 클래스)으로 교체할 수 있어야 한다는 원칙 |
인터페이스 분리의 원칙(Dependency Inversion Principle) | - 실제 사용 관계는 바뀌지 않으며, 추상을 매개로 메시지를 주고받음으로써 관계를 최대한 느슨하게 만드는 원칙 |
연습 문제
Q. 객체 지향 기법에서 같은 클래스에 속한 각각의 객체를 의미하는 것은?
- instance
- message
- method
- module
A. 1
참고 문헌
- NCS 정보처리기사 연구회, “2022 수제비 정보처리기사 필기”, 건기원(2022), p1-89-91.