객체 지향 프로그래밍

1abme·2023년 3월 15일
0

JavaScript

목록 보기
3/5

객체 지향 프로그래밍

( OOP, Object - Oriented Programming)

절차적 언어


초기의 프로그래밍언어는 일반적으로 절차적 언어라고 부르며 이는 순차적인 명령의 조합이다.

객체지향 언어


'클래스'라고 부르는 데이터 모델의 청사진을 사용해 코드를 작성하며 현대의 언어들은 대부분 객체지향의 특징을 지니고있다. 예외로 javascript는 엄밀히 따지자면 객체지향언어가 아니지만 객체지향 패턴으로 작성이 가능하다.

OOP


프로그램 설계 철학중 하나로 코드를 추상화하여 직관적으로 생각 할 수 있게 만드는 OOP는 객체로 그룹화 된다. 객체의 내에는 "데이터와 기능이 함께 있다" 는 원칙에 따라 메서드와 속성이 존재하며 한번 생성시 메모리상에서 반환되기 전까지 객체 내 모든 것이 유지된다.

OOP Basic Concepts


객체 지향 프로그래밍에는 크게 네 가지 기본적인 개념이 있다. 각 개념의 장점을 간단히 말해보자면 캡슐화는 코드가 복잡하지 않게 만들고, 재사용성을 높인다. 추상화는 코드가 복잡하지 않게 만들며 단순화된 사용으로 변화에 대한 영향을 최소화한다. 상속 역시 불필요한 코드를 줄여 재사용성을 높인다. 마지막으로 다형성으로 인해 동일한 메서드에 대해 객체의 특성에 맞게 달리 작성하는 것이 가능해진다.

Encapsulation (캡슐화)


캡슐화는 데이터(속성)와 기능(메서드)을 하나의 객체에 넣어서 묶는 것을 말한다. 데이터와 기능은 느슨한 결합(loose coupling) 이 되며 이는 코드 실행 순서에 따라 절차적으로 작성하는 것이 아닌 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미한다. 또한 은닉화(hiding) 의 특징을 가지고 있으며 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것을 의미한다. 디테일한 구현이나 데이터는 숨기되 객체 외부에 필요한 동작(메서드)만 노출시켜 수정시 객체내 메서드의 구현만 수정하여 코드 흐름은 바뀌지 않게 해 유지보수를 쉽게 만든다. 절차적 코드의 경우 데이터의 형태가 바뀔때 코드의 흐름에 영향을 미쳐 유지보수가 어렵다. 때문에 더 엄격한 클래스는 속성의 직접적 접근을 차단하고 설정하는 함수(setter), 불러오는 함수(getter)를 철저히 구분하기도 한다.

Inheritance (상속)


상속은 부모 클래스의 특징을 자식 클래스가 물려받는 것이다. 자세하게는 "기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속" 받는다고 표현하는 것이 옳다.

Abstraction (추상화)


추상화는 내부 구현은 복잡하지만 실제로 노출되는 부분(interface)은 단순하게 만든다는 개념이다. 너무 많은 기능들이 노출되지 않은 덕분에 예기치 못한 사용상의 변화를 막는다. 캡슐화가 코드나 데이터의 은닉에 포커스가 맞춰져있다면 추상화는 클래스 사용자에게 필요치 않은 메서드 등을 노출시키지 않고, 단순이름으로 정의하는 것에 포커스가 맞춰져 있다. 클래스 정의 시, 메서드와 속성만 정의한 것을 인터페이스라고 부르며 이것이 추상화의 본질이다.

Polymorphism (다형성)


다형성은 poly(많은), morph(형태)의 조합의 단어 Polymorphism의 뜻에 맞게 다양한 형태를 가질 수 있다. 기본 클래스의 특징을 파생 클래스가 상속받지만서도 파생 클래스들은 각각의 동작을 다르게 작동하거나 구현 할 수 있다.만일 언어 자체에서 다형성을 제공하지 않을시 기분 클래스에 종류별로 분기를 시켜 다르게 만들어야하므로 매우 비효율적이다.

profile
제가 이해하고 있는게 맞나요...?

0개의 댓글

관련 채용 정보