객체지향 프로그래밍이란?
- 객체 지향 프로그래밍 (Object - Oriented Programming, OOP)은 프로그래밍에서 필요한 데이터를 추상화하여 상태와 행위를 가진 객체로 만들고, 이 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법
여기서 객체란?
- 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미
- 값을 저장할 변수와 작업을 수행할 메소드를 서로 연관된 것들끼리 묶어서 만든 것을 객체라고 함
- 비유를 하자면 객체지향 프로그래밍 = 레고, 객체 = 레고 조각!
- 레고 조각은 여러군데에서 재사용할 수 있으므로 부품화, 재사용성이라는 OOP 특징을 보여줌
특징
1. 추상화
- 객체에서 공통된 속성과 행위를 추출하는 것
- 공통의 속성과 행위를 찾아 타입을 정의하는 과정
- 불필요한 정보는 숨기고 중요한 정보만을 표현하여 프로그램을 간단하게 만듦
2. 캡슐화
- 데이터 구조와 데이터를 다루는 방법들을 결합시켜 묶는 것 (변수와 함수를 하나로 묶는것을 말함)
- 낮은 결합도를 유지할 수 있도록 설계
- 변수와 메소드를 클래스라는 캡슐에 넣어 분류하는 것으로 재활용이 원활하고, 정보은닉의 장점이 있음
3. 상속
- 상위 클래스의 속성과 행위를 하위 클래스에 물려주거나 반대로 물려 받는 것을 말함
- 새로운 클래스가 기존의 클래스의 데이터와 연산을 이용할 수 있게 함
- 장점
재사용성 증가, 범용적 사용 가능, 자료와 메서드의 자유로운 사용 및 추가 가능 - 단점
상위 클래스의 변경이 어려워짐, 불필요한 클래스 증가, 잘못된 상속을 사용할 수 있음
4. 다형성
- 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것
- 어떠한 요소에 여러 개념을 넣어 놓는 것
(하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있기 때문에 다형성이라는 특징을 가짐) - 오버라이딩
- 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 것 - 오버로딩
- 같은 이름의 메서드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것
SOLID 원칙
1. 단일 책임 원칙 (SRP, Single Responsibility Principle)
- 하나의 클래스는 단 하나의 책임만을 가진다
- 단일 책임 원칙을 지키지 않을 경우 한 책임의 변경에 의해 다른 책임과 연관된 코드에 영향을 미칠 수 있음
2. 개방-폐쇄 원칙 (OCP, Open/Closed Principle)
- 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 함
- 기능을 변경하거나 확장할 수 있으면서 기능을 사용하는 코드는 수정하지 않음
3. 리스코프 치환 원칙 (LSP, Liskov Substitution Principle)
- 프로그램 객체는 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 함
- 상위 타입의 객체를 하위 타입의 객체로 치환해도, 상위 타입을 사용하는 프로그램은 정상 작동해야 함
4. 인터페이스 분리 원칙 (ISP, Interface Segregation Principle)
- 공용으로 사용되는 하나의 인터페이스 보다는 여러 개의 인터페이스로 구성하는 것이 좋음
- 인터페이스는 인터페이스를 사용하는 클라이언트를 기준으로 분리
- 인터페이스(클라이언트가 원하는)를 분리함으로써 각 클라이언트가 사용하지 않는 인터페이스에 변경이 있어도 영향을 받지 않도록 해야 함
5. 의존관계 역전 원칙 (DIP, Dependency Inversion Principle)
- 추상화에 의존하고, 구체화에는 의존하지 않아야 함
- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안되고, 저수준 모듈은 고수준 모듈에서 정의한 추상 타입에 의존해야 함
728x90
'ssung_항해일지 > CS 지식 및 기술면접' 카테고리의 다른 글
DI (Dependency Injection) (0) | 2023.05.09 |
---|---|
REST API (0) | 2023.05.08 |
시간 복잡도(Time Complexity) 와 공간 복잡도 (Space Complexity) (1) | 2023.04.25 |
CORS란 무엇일까? (0) | 2023.04.25 |
배열과 링크드리스트 (0) | 2023.04.25 |