Learn/Javascript

객체 지향 프로그래밍

zeereo 2023. 1. 13. 13:33

 

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

 

컴퓨터 프로그래밍의 패러다임 중 하나이다.

객체지향 프로그래밍은 실세계에 존재하고 인지하고 있는 객체(Object)를 소프트웨어의 세계에서 표현하기 위해 객체의 핵심적인 개념 또는 기능만을 추출하는 추상화(abstraction)를 통해 모델링하려는 프로그래밍 패러다임을 말한다. 다시 말해, 우리가 주변의 실세계에서 사물을 인지하는 방식을 프로그래밍에 접목하려는 사상을 의미한다.

 

 

캡슐화 (encapsulation)

데이터의 번들링(bundling) : 데이터(속성)와 기능(메서드)을 따로 정의하는 것이 아닌, 하나의 객체 안에 넣어서 묶는 것

 

데이터(속성)와 기능(메서드)들이 느슨하게 결합 : 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미

 

은닉화 : 은닉화는 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것

디테일한 구현이나 데이터는 숨기고, 객체 외부에서 필요한 동작(메서드)만 노출

 

 

추상화(abstraction)

자료 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것

내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만든다는 개념

 

캡슐화와 추상화의 차이

캡슐화가 코드나 데이터의 은닉에 포커스가 맞춰져있다면,

추상화는 클래스를 사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스

클래스 정의 시, 메서드와 속성만 정의한 것을 인터페이스라고 부릅니다. 이것이 추상화의 본질입니다.

 

상속(inheritance)

부모 클래스의 특징을 자식 클래스가 물려받는 것입니다.

새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능

상속을 통해서 기존의 클래스를 상속받은 하위 클래스를 이용해 프로그램의 요구에 맞추어 클래스를 수정할 수 있고 클래스 간의 종속 관계를 형성함으로써 객체를 조직화

 

 

 

다형성(polymorphism)

개념이란 어떤 한 요소에 여러 개념을 넣어 놓는 것

상속 받은 것 이외에도 각각 다양한 특징을 갖출 수 있다.

기초 클래스 또는 어떠한 인터페이스를 구현하는 상위 클래스를 생성하고, 해당 클래스를 상속받는 다수의 하위 클래스들을 만들어 상위 클래스의 포인터나 참조변수 등이 하위 클래스의 객체를 참조하게 하는 것이다. 이 때 각각의 하위 클래스는 상위 클래스의 메소드 위에 자신의 메소드를 덮어쓰는 메소드 오버라이딩(method overriding)을 수행하며, 상위 클래스의 참조변수가 어떤 하위 클래스의 객체를 참조하느냐에 따라 호출되는 메소드가 달라진다

 

 

 

 

OOP의 주요 개념에 대한 장점

캡슐화 : 코드가 복잡하지 않게 만들고, 재사용성을 높입니다.

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

상속    : 불필요한 코드를 줄여 재사용성을 높입니다.

다형성 : 동일한 메서드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해집니다.