티스토리 뷰

반응형

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

객체 지향 프로그래밍은 클래스를 사용하여 추상적인 개념들을 정의하고, 그 클래스를 사용하여 실제 사용할 객체를 만들어냄으로써 현실 세계의 모든 것을 표현할 수 있다는 것에서 출발한다.

객체 지향 프로그래밍이란, 프로그래밍에서 필요한 데이터를 추상화해 객체를 만들고 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법론이다.

 

 

클래스란, 객체들이 공통적으로 갖는 특성들을 모아 정의 내린 것이다. (추상화)
일종의 설계도이고 이것을 사용하여 우리가 사용할 수 있는 실제 객체를 생성한다.
객체란, 프로그램에서 하나의 역할을 수행하는 속성(Property)과 행위(Method)로 구성된 요소이다.

 

 

 

 

 

 

 

프로그래밍 패러다임

  • 명령형 프로그래밍 (How)
    • 절차지향절차 지향 프로그래밍
      • 구조적 프로그래밍
    • 객체지향 프로그래밍
  • 선언형 프로그래밍 (What)
    • 함수형 프로그래밍

 

 

구조적 프로그래밍은 절차지향 프로그래밍을 개선한 형태이다. 구조적 프로그래밍은 프로그램을 함수 단위로 나누고 호출하는 방식이다. 큰 문제를 해결하기 위해 작은 단위로 쪼개서 해결한다. Top-Down 형태이다.

객체지향 프로그래밍은 이러한 구조적 프로그래밍의 단점을 개선한 형태이다. 큰 문제를 작게 쪼개는 게 아니라 작은 문제를 해결하는 객체를 만든다. 그러한 객체들을 조합해 큰 문제를 해결한다. Bottom-Up 형태이다.

 

 

 

 

객체 지향 프로그래밍(OOP)의 장점과 단점

장점

- 코드의 재사용성

- 유지보수 용이

- 간결한 코드

- 대형 프로젝트에 적합 : 모듈화를 통해 업무 분담에 용이

 

단점

- 처리 시간이 비교적 오래 걸린다.

- 용량이 커질 수 있다.

- 프로그램 설계에 대한 고민이 필요하다.

 

 

 

 

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

1. 캡슐화 (Encapsulation)

어떠한 클래스를 사용할 때 내부의 동작이 어떻게 돌아가는지 모르더라도 사용법만 알면 사용할 수 있도록 클래스 내부를 감추는 기법이다.

변수나 메서드가 외부로 노출되지 않기 때문에 보안에도 용이하다.

객체의 속성을 보호하기 위해 사용된다.

 

2. 추상화 (Abstraction)

추상화는 그 존재가 가지고 있는 가장 특징적인 속성을 파악해나가는 것이다.

공통 부분(상위)과 특정 부분(하위)을 분리해서 재조합하는 것이다.

목적과 관련 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 개념이다.

 

3. 상속 (Inheritance) 

부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용할 수 있도록 한다.

- 재사용성 : 필요한 속성을 상속받아 사용한다.

- 확장성 : 상위 개념 입장에서 보면 자신의 속성이 하위 개념으로 넘어가 확장되는 것이다. (예약어 extends)

- 유지보수성 : 상위 클래스의 속성을 변경하면 하위 클래스의 속성도 변경할 수 있다.

 

4. 다형성 (Polymorphism)

어떤 하나의 변수명이나 함수명이 상황에 따라 다르게 해석될 수 있는 것을 말한다.

형태가 같지만 다른 기능을 하는 것이다.

같은 메서드라도 수행을 다르게 하여 객체마다의 동작이 다르다.

 

userA(), userB()라는 클래스 안에 있는 sayHello()라는 동일한 메서드가 있다고 가정해보자. 메서드의 형태는 같지만 메서드를 실행했을 때 'Hi, I am A', 'Hi, I am B' 다른 기능을 한다.

 

 

 

 

 

 

SOLID 원칙

Clean Code의 저자 로버트 마틴이 소개한 SOLID는 객체 지향 프로그래밍의 장점을 극대화해주는 다섯 가지 기본 원칙이다.

 

S : SRP(Single Responsibility Principle), 단일 책임 원칙

O : OCP(Open-Closed Principle), 개방-폐쇄 원칙

L : LSP(Liskov Substitution Principle), 리스코프 치환 원칙

I : ISP(Interface Segregation Principle), 인터페이스 분리 원칙

D : DIP(Dependency Inversion Principle), 의존 역전 원칙

 

 

 

1. SRP 단일 책임 원칙

Single Responsibility Priciple. 하나의 객체는 하나의 책임만 가져야 한다.

 

2. OCP 개방 폐쇄 원칙

Open-Closed Priciple. 기존 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계되어야 한다.

 

3. LSP 리스코프 치환 원칙

Liskov Substitution Priciple. 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위를 수행할 수 있어야 한다.

 

4. DIP 의존 역전 원칙

Dependency Inversion Principle. 변화가 잦은 것보다는 변화가 거의 없는 것에 의존해야 한다.

 

5. ISP 인터페이스 분리 원칙

Interface Segregation Principle. 인터페이스를 클라이언트에 특화되도록 분리해야 한다.

 

 

 

 

 

 


참고

https://evan-moon.github.io/2019/08/24/what-is-object-oriented-programming/

반응형

'Programming' 카테고리의 다른 글

라이브러리와 프레임워크 차이  (0) 2023.07.30
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31