객체 지향 프로그래밍(OOP)

Running boy·2023년 8월 6일
0

컴퓨터 공학

목록 보기
22/36

객체 지향 프로그래밍(Object-Oriented Programming, OOP)

프로그램을 입출력의 흐름이 아닌 여러 독립적인 객체의 유기적인 협력과 결합으로 파악하려는 컴퓨터 프로그래밍의 패러다임이다.

객체 지향적 설계를 통해 프로그램을 보다 유연하고 수정이 용이하게 만들 수 있다. 또한 코드의 재사용성이 증가하여 반복을 줄일 수 있어 코드가 간결해지고 유지보수에 유리해진다.

반대되는 의미는 절차 지향 프로그래밍(Procedural Programming).


객체 지향의 4대 특징

1. 추상화(Abstraction)

불필요한 세부 사항을 숨기고 본질적인 공통 사항만 추출해서 표기하는 것이다.

abstract 클래스를 구현할 때 하위 클래스의 공통점만 추출해서 정의한 것을 떠올려보자.

2. 상속(Inheritance)

상위 클래스의 속성과 기능을 하위 클래스가 물려받아 사용할 수 있게 하는 것이다.

코드를 재사용하여 반복을 줄여주고 속성과 기능에 간편하게 접근할 수 있다. 또한 계층 구조를 형성하여 전체 코드의 구조를 파악하는데 좋다.

3. 다형성(Polymorphism)

서로 다른 클래스의 객체를 공통 부모 클래스의 객체로서 취급할 수 있는 것이다.

다형성을 활용하면 클래스간의 결합도가 낮아져 보다 유연하고 수정이 용이한 프로그램 설계가 가능해진다.

4. 캡슐화(Encapsulation)

서로 연관있는 속성과 기능을 하나의 캡슐로 묶어 외부로부터 보호하고 필요한 부분만 노출하는 것이다.

접근 제한자를 생각하자.

캡슐화를 하는 이유로는 크게 두가지가 있다.
1. 데이터 보호(data protection) – 외부로부터 클래스에 정의된 속성과 기능들을 보호
2. 데이터 은닉(data hiding) – 내부의 동작을 감추고 외부에는 필요한 부분만 노출


객체 지향의 5대 원칙(SOLID Principles)

객체 지향 설계의 5가지 기본 원칙 by Robert Martin.


1. SRP(Single Responsibility Principle)

단일 책임 원칙.

하나의 클래스는 하나의 책임을 가진다.
즉 하나의 클래스는 하나의 기능만 해야 하며 수정할 이유가 오직 하나여야 한다.

2. OCP(Open/Closed Principle)

개방/폐쇄 원칙.

확장에 대해서는 개방 되어야 하지만 수정에 대해서는 폐쇄 되어야 한다.
즉 기존 코드를 수정하지 않더라도 새로운 기능을 확장할 수 있어야 한다.

3. LSP(Liskov's Substitution Principle)

리스코프 치환 원칙.

자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다.

이는 객체 지향의 다형성과 비슷한 맥락의 내용이다.

4. ISP(Interface Segregation Principle)

인터페이스 분리 원칙.

클래스는 자신이 사용하지 않는 인터페이스에 의존하지 않아야 한다.

예를 들어, 드래그를 사용하지 않는 GUI에서 드래그 인터페이스 구현을 강요 받아서는 안된다.

5. DIP(Dependency Inversion Principle)

의존성 역전 원칙.

상위 클래스는 하위 클래스에 의존하지 않아야 한다.

마찬가지로 동일한 인터페이스에 의존해야지 구현체 자체에 의존해선 안된다는 의미.

profile
Runner's high를 목표로

0개의 댓글