[JavaScript] 객체 지향 프로그래밍

jungmin Lee·2023년 6월 10일
0

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

동일한 목적이나 기능을 하는 변수와 함수들을 각각 하나로 묶어서 객체로 만들고, 객체들간의 상호작용을 통해 프로그램을 만드는 것을 말합니다. 현대의 언어들은 대부분 객체 지향의 특징을 갖고 있으며 Java, C++, C# 등이 대표적이고 JavaScript도 객체 지향으로 작성 가능합니다

객체 지향 프로그래밍이 등장하면서, 변수와 함수로 순차적으로 작동하는 것을 넘어서 데이터의 접근과 데이터의 처리 과정에 대해서 따로 취급되지 않고, 한 번에 묶여서 처리할 수 있습니다.

OOP는 객체로 그룹화되며 이 객체는 한번 만들고 나면, 메모리상에서 반환되기 전까지 객체 내의 모든 것이 유지되며 객체 내에는 데이터와 기능이 함께 있으므로 메서드와 속성이 존재합니다.

OOP의 특징은 캡슐화, 추상화, 상속성, 다형성이며 4가지에 대해서 간략하게 정리하고자 합니다.

캡슐화 (encapsulation)

캡슐화는 외부에서 앞서 말했던 데이터(속성)와 기능(메서드)을 하나의 객체 안에 넣어서 묶는 것입니다. 데이터(속성)와 기능(메서드)들이 느슨하게 결합되는 것이며 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 실제 모습과 닮게 코드를 모아 결합하는 것을 의미합니다.
캡슐화에는 실제로 구현되는 부분을 외부에 드러나지 않도록 만드는 은닉화의 특징도 포함하고 있으며 은닉화에 포커스를 두고 있습니다. 은닉화의 특징을 가지고 코드를 작성하면 객체 내 메서드의 구현만 수정하고, 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 만들 수 있어서 언제든지 구현을 수정할 수 있으므로 유지보수에도 좋습니다.
더 엄격한 클래스는 속성의 직접적인 접근을 막고, 설정하는 함수(setter), 불러오는 함수(getter)를 철저하게 나누기도 합니다.

추상화 (abstraction)

추상화는 내부 구현은 복잡하지만 실제로 노출되는 부분은 단순하게 만드는 것을 의미합니다
추상화를 통해 인터페이스가 단순해지므로 너무 많은 기능들을 노출하지 않을 수 있어서 예기치 못한 사용상의 변화가 일어나지 않도록 만들 수 있습니다.
클래스를 사용하는 사람이 필요하지 않은 메서드 등은 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스를 두고 있습니다

상속 (inheritance)

상속은 부모 클래스의 특징을 자식 클래스가 물려받는 것이며 '기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속받는다'로 표현하는 것을 말합니다. 하나의 클래스가 가진 특징을 다른 클래스가 그대로 물려받으므로 불필요한 코드의 사용을 줄여서 재사용성을 높이는 것을 말합니다

다형성 (polymorphism)

다형성은 같은 모양의 코드가 다른 동작을 하는 것을 나타내며 하나의 객체가 여러 가지의 타입을 가질 수 있다는 것을 의미합니다. 다형성은 동일한 메서드에 대해 if / else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해집니다.


객체 지향 프로그래밍(OOP)의 주요 특징 정리

클래스와 객체 (Class and Objects)
OOP에서 클래스는 객체를 만들기 위한 설계도이며, 객체는 클래스의 인스턴스로 실제로 메모리에 할당되어 사용된다.

캡슐화 (Encapsulation)
캡슐화는 데이터와 관련 메서드를 하나의 단위로 묶는 개념이다. 데이터는 외부에서 직접 접근되지 않고, 메서드를 통해 접근 및 조작된다.

상속 (Inheritance)
상속은 부모 클래스(슈퍼 클래스)의 속성과 메서드를 자식 클래스(서브 클래스)가 상속받는 개념으로 코드 재사용성이 높아지고 계층 구조를 형성할 수 있다.

다형성 (Polymorphism)
다형성은 객체가 여러 가지 형태로 동작할 수 있는 능력을 말한다. 다형성을 통해 여러 객체가 동일한 메서드를 호출할 때 각 객체의 특성에 따라 다른 동작을 수행할 수 있다.

추상화 (Abstraction)
추상화는 복잡한 시스템을 단순화하여 중요한 부분만 강조하는 개념으로 추상 클래스와 인터페이스를 사용하여 추상화를 구현할 수 있다.

메시지 패싱 (Message Passing)
객체 간의 상호 작용은 메시지를 주고받는 방식으로 이루어진다. 메서드 호출을 통해 메시지를 전달하고 해당 객체가 메시지를 처리한다.


절차 지향 프로그래밍 vs 객체 지향 프로그램

객체 지향 프로그래밍이 등장하기 전의 절차 지향 프로그래밍 초기의 C, 포트란 같은 언어들을 말하며 객체 지향의 개념이 없는 절차적 언어입니다. 절차 지향의 경우에는 데이터를 중심으로 바라보며 객체 지향의 경우는 기능을 중심으로 메서드를 구현하게 되므로 많은 기능을 수반하는 프로그래밍의 경우에는 절차 지향 프로그램보다는 객체 지향 프로그램이 더욱 적합합니다. 객체 지향의 경우 코드의 재활용성이 높고 코딩이 절차지향보다 간편하며 디버깅이 편리하다는 장점이 있지만 처리속도가 절차지향보다 느리고 설계에 많은 시간이 소요된다는 단점이 있습니다.

profile
Leejungmin

0개의 댓글