객체지향 프로그래밍이란?
- 객체지향 프로그래밍 (Object-Oriented Programming, OOP)은 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍입니다.
1. 객체지향 프로그래밍
1) 객체란?
- 객체는 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며 값을 저장할 변수와 작업을 수행할 메서드를 서로 연관된 것들끼리 묶어서 만든 것을 객체라고 할 수 있습니다.
2) 객체지향 프로그래밍 언어
- 객체지향 프로그래밍을 지원하는 언어로는 C++, C#, Java, Python, JavaScript, Ruby, Swift 등이 있습니다.
객체지향 프로그래밍의 특징 및 원칙
1) 특징
- 특징으로 추상화, 캡슐화, 상속, 다형성이 있습니다.
- 추상화
- 객체에서 공통된 속성과 행위를 추출하는 것입니다.
- 공통의 속성과 행위를 찾아서 타입을 정의하는 과정입니다.
- 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만드는 것입니다.
- 캡슐화
- 데이터 구조와 데이터를 다루는 방법들을 결합시켜 묶는 것입니다.(변수와 함수를 하나로 묶는 것을 뜻합니다.)
- 낮은 결합도를 유지할 수 있도록 설계하는 것입니다.
- 속성과 기능을 정의하는 변수와 메서드를 클래스라는 캡슐에 넣어서 분류하는 것으로 재활용이 원활하다는 장점이 있고 캡슐화를 통해서 정보은닉을 활용할 수있습니다.
- 상속
- 클래스의 속성과 행위를 하위 클래스에 물려주거나 하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것을 말합니다.
- 새로운 클래스가 기존의 클래스의 데이터와 연산을 이용할 수 있게 하는 기능입니다.
- 장단점
-
장점 단점 재사용으로 코드가 줄어듭니다. 상위 클래스의 변경이 어려워집니다. 범용적인 사용이 가능합니다. 불필요한 클래스가 증가할 수 있습니다. 자료와 메서드의 자유로운 사용 및 추가가 가능합니다. 상속이 잘못 사용될 수 있습니다.
-
- 다형성
- 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것입니다.
- 어떠한 요소에 여러 개념을 넣어 놓는 것입니다.
- 객체지향 프로그래밍은 하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있기 때문에 다형성이라는 특징을 갖게 됩니다.
- 오버라이딩
상위 클래스가 갖고 있는 메서드를 하위 클래스가 재정의해서 사용하는 것입니다. - 오버로딩
같은 이름의 메서드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것입니다.
- 오버라이딩
- 객체지향 프로그래밍은 하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있기 때문에 다형성이라는 특징을 갖게 됩니다.
- 추상화
2) 원칙 (SOLID)
- SRP (Single Responsibility Principle) : 단일 책임 원칙
- 하나의 클래스는 단 하나의 책임만 가져야 합니다.
- 단일 책임 원칙을 지키지 않을 경우 한 책임의 변경에 의해 다른 책임과 관련된 코드에 영향이 갈 수 있습니다.
- OCP (Open-Closed Principle) : 개방 - 폐쇄 원칙
- 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 합니다.
- 기능을 변경하거나 확장할 수 있으면서 기능을 사용하는 코드는 수정하지 않습니다.
- LSP (Liskov Substitution Principle) : 리스코프 치환 원칙
- 프로그램 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 합니다.
- 상위 타입의 객체를 하위 타입의 객체로 치환해도, 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 합니다.
- ISP (interface Segregation Principle) : 인터페이스 분리 원칙
- 범용 인터페이스 하나보다 클라이언트를 위한 여러 개의 인터페이스로 구성하는 것이 좋습니다.
- 인터페이스는 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 합니다.
- 클라이언트가 필요로 하는 인터페이스로 분리함으로써 각 클라이언트가 사용하지 않는 인터페이스에 변경이 있어도 영향을 받지 않도록 만들어야 합니다.
- DIP (Dependency Inversion Principle) : 의존 역전의 원칙
- 구체화에 의존하지 않고 추상화에 의존해야 합니다.
- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안되고 저수준 모둘은 고수준 모듈에서 정의한 추상 타입에 의존해야 합니다.
객체지향 프로그래밍의 장단점
장점 | 단점 |
클래스 단위로 모듈화 시켜서 개발하기 때문에 업무 분담이 편리하고 대규모 소프트웨어 개발에 적합합니다. | 처리속도가 상대적으로 느립니다. |
클래스 단위로 수정이 가능하기 때문에 유지 보수가 편리합니다. | 객체의 수가 많아짐에 따라 용량이 커질 수 있습니다. |
클래스를 재사용하거나 상속을 통해 확장함으로써 코드 재사용이 용이해집니다. | 설계 시 많은 시간과 노력이 필요하게 될 수 있습니다. |
'Programming' 카테고리의 다른 글
[Programming] - 절차지향 & 객체지향 & 함수형 프로그래밍이란? (0) | 2024.03.20 |
---|---|
[Programming] - 함수형 프로그래밍이란? (0) | 2024.03.20 |
[Programming] - MSA(Micro Service Architecture란 (1) | 2024.03.06 |
[Notion] - Notion 키보드 및 마크다운 단축키 (1) | 2024.02.18 |
[Notion] - Notion 사용법 & 단축키 (0) | 2024.02.15 |