객체 지향 프로그래밍

Taehye.on·2023년 3월 15일
0

코드스테이츠 44기

목록 보기
29/89
post-thumbnail

D-22

🔍 객체 지향 언어란? (OOP)

이 전에는 절자 지향 프로그래밍이 있었다. 이를 절차적 언어로 불렀는데 이는 순차적인 명령의 조합이고 객체 지향의 개념이 없었다.
객체 지향 프로그래밍이 등장하며 데이터의 기능이 별개로 취급되지 않고 한번에 묶여 처리할 수 있다.


🔍 OOP

OOP는 프로그램 설계 철학 중 하나이다. OOP는 객체로 그룹화되며
객체(class) 내에는 메서드와 속성이 존재한다.

ex)

// Name of class
class Car

// Properties
color, price, speed

// Method
Start();
Backward();
Forward();
Stop();

자동차(class)의 색상 가격 속력을 고유의 속성(Properties)이고
시작, 후진, 전진, 멈춤과 같은 기능은 메서드(Method)로 존재한다.


🔍 OOP 기본 개념

OOP 기본 개념으로는 크게 4가지가 있다.

    Encapsulation (캡슐화)
    Abstraction (추상화)
    Inheritance (상속)
    Polymorphism (다형성)

📌 Encapsulation (캡슐화)

캡슐화는 데이터(속성)와 기능(메서드)들을 하나의 객체 안에 넣어서 묶는 것이다.

데이터(속성)와 기능(메서드)들이 느슨하게 결합되는 것이다.
이는 언제든 구현을 수정할 수 있게 해줘서 느슨한 결합에 유리하다.

또 내부 데이터나 내부 구현이 외부로 노출되지 않게하는 은닉화의 특징도 가지고 있다.
따라서 디테일한 구현이나 데이터는 숨기고 객체 외부에서 필요한 메서드만 노출시킨다.

📌 Abstraction (추상화)

추상화는 내부 구현은 복잡하지만 실제 노출 부분은 단순히 만든다는 개념이다.

클래스 정의 시, 메서드와 속성만 정의한 것을 인터페이스라 부른다.

이러한 추상화 덕분에 인터페이스가 단순해진다.

🤷‍♂️ 캡슐화와 추상화의 차이

추상화와 캡슐화는 엄연히 다르다.
캡슐화가 코드나 데이터의 은닉에 집중한다면
추상화는 클래스를 사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고 단순한 이름으로 정의하는 것에 집중한다.

📌 Inheritance (상속)

상속은 부모 클래스의 특징을 자식 클래스가 물려받는 것이다.
자세하게 말하면 기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속받는다 할 수 있다.

ex> 
class = Human
properties = name, sex, age
methods = sleep(), eat()

↓↓ 상속 ↓↓
class = Student
properties = name, sex, age, learning subject
methods = sleep(), eat(), learn()

이처럼 학생은 결국 사람이므로 상속을 이용할 수 있다.
추가적으로 학생은 학습내용, 공부하다 와 같은 속성과
자다, 먹다, 배우다 와 같은 메서드를 추가할 수 있다.

📌 Polymorphism (다형성)

다형성은 다양한 형태를 뜻한다.
말하다라는 동작을 해도 각기 다른 동물들이 제각각 소리를 내는것과 유사하다.
만약 이 다형성이 없다면 부모 클래스에 종류별로 분기시켜 하나씩 다르게 만드는 불편함이 생길것이다.


🔍 OOP 장점

Encapsulation (캡슐화)

    캡슐화는 코드가 복잡하지 않게 만들고 재사용성을 높인다.

Abstraction (추상화)

    추상화는 코드가 복잡하지 않게 만들고 단순화된 사용으로 변화에 대한 영향을 최소화한다.

Inheritance (상속)

    상속은 불필요한 코드를 줄여 재사용성을 높인다.

Polymorphism (다형성)

    다형성으로 인해 동일한 메서드에 대해 if나 else if 와 같은 조건문 대신 객체의 특성에 맞게 작성하는 것이 가능하다.

0개의 댓글