반응형
OOP(Object-Oriented Programming)란?
객체 지향 프로그래밍 방식
OOP 이전의 프로그래밍 방식은?
절차적 프로그래밍, 구조적 프로그래밍 두 가지가 있었다.
절차적 프로그래밍은프로시저로 구성된 프로그래밍 방식을 말한다.
절차적 프로그래밍은 C, Algo, Cobol, Basic 등이 있다.
구조적 프로그래밍은 절차적 프로그래밍과 비슷하지만 프로시저를 기준으로 나누는 것이 아닌 모듈을 기준으로 나눈다.
절차적 프로그래밍이 프로시저로 쪼갰다면 그 프로시저를 비슷한 애들끼리 묶어서 소스파일로 묶은 것을 모듈이라고 생각하면 쉽다.
"모듈 > 프로시저"
구조적 프로그래밍은 큰 문제를 해결하기 위해 문제를 작은 단위들로 나누어 해결하는 방식이어서 "Top-Down 방식"이라고도 한다.
객체 지향 프로그래밍 방식
구조적 프로그래밍 방식의 개선된 형태이다.
큰 문제를 작게 쪼개는 것이 아니라, 작은 문제들을 해결하는 객체를 만든다.
객체들을 조합해 큰 문제를 해결하는 "Bottom-Up 방식"이라고도 한다.
OOP의 장점과 단점
장점
- 코드의 재사용성이 높아진다.
- 유지보수가 쉽다.
- 코드가 간결해진다.
단점
- 처리 시간이 비교적 오래 걸린다.
- 프로그램을 설계할 때 많은 고민과 시간을 투자해야 한다.
OOP의 5원칙 (SOLID)
< Clean Code >의 저자, 로버트 마틴이 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 패더스가 SOLID라는 약어로 소개한 것!
S (SRP : Single Responsibility Principle)
한 클래스는 하나의 책임만 가져야 한다.
O (OCP : Open/Closed Principle)
확장에는 열려(Open) 있으나, 변경에는 닫혀(Closed) 있어야 한다.
L (LSP : Liskov’s Substitution Principle)
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
I (ISP : Interface Segregation Principle)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
D (DIP : Dependency Inversion Principle)
추상화에 의존한다. 구체화에 의존하면 안 된다.
OOP의 4가지 특성
1. 캡슐화
- 실제로 구현 부분을 외부에 드러나지 않도록 하는 것
- 변수와 메서드를 하나로 묶음
- 데이터를 외부에서 직접 접근하지 않고 함수를 통해서만 접근
- ex) public, private, protected
public : 클래스 외부에서 접근 가능
private : 클래스 내부에서만 접근 가능
protected : 상속받은 자식 클래스에서만 접근 가능
2. 상속
- 자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것
- 기능의 일부분을 변경하는 경우 자식 클래스에서 상속받아 수정 및 사용함
- 상속은 캡슐화를 유지, 클래스의 재사용이 용이하도록 해 준다.
3. 추상화
- 인터페이스로 클래스들의 공통적인 특성(변수, 메서드)들을 묶어 표현하는 것
4. 다형성
- 어떤 변수, 메서드가 상황에 따라 다른 결과를 내는 것
오버 로딩(Overloading) : 하나의 클래스에서 메서드의 이름이 같지만, 파라미터가 다른 것
오버 라이딩(Overriding) : 부모 클래스의 메서드를 자식 클래스의 용도에 맞게 재정의하여 코드의 재사용성을 높임
728x90
댓글