객체 지향 ( OOP )

이성민·2023년 5월 11일
0

객체 지향 프로그래밍은 하나의 모델이 되는 청사진(blueprint) > class 을 만들고, 그 청사진을 바탕으로 한 인스턴스 객체(instance object) > instance 를 만드는 프로그래밍 패턴.
(절차 지향 프로그래밍과는 다르게 데이터와 기능을 한 곳에 묶어서 처리. 속성과 메서드가 하나의 "객체"라는 개념에 포함되며, 이는 JavaScript 내장 타입인 object와는 다르게, Class라는 이름으로 부름.)

객체를 만드는 방식은 그냥 일반적인 함수를 정의하듯 만듦.
그냥 실행하는 것이 아니고 new 키워드를 써서 만듦. 새로운 인스턴스를 만드는 방법.
각각의 인스턴스는 클래스의 고유한 속성과 메서드를 갖게 됨.

일반적인 다른 함수와 구분하기 위해 클래스는 보통 대문자로 시작하며 일반명사로 만듦.
일반적인 함수는 적절한 동사를 포함하고 소문자로 시작.


ES5는 prototype이라는 키워드를 사용해야 메서드를 정의할 수 있다. Car 클래스에 메서드를 추가하기 위해서는 Car.prototype.refuel과 같이 prototype을 이용해야 한다.

ES6에서는 생성자 함수와 함께 class 키워드 안쪽에 묶어서 정의한다.


캡슐화는 외부에서 데이터(속성)와 기능(메서드)을 따로 정의하는 것이 아닌, 하나의 객체 안에 넣어서 묶는 것. 데이터(속성)와 기능(메서드)들이 느슨하게 결합.

느슨한 결합은 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것. 코드만 보고도 인스턴스 객체의 기능을 상상할 수 있게 작성하는 것이 느슨한 결합을 추구하는 코드 작성법.

캡슐화라는 개념은 "은닉화"의 특징도 포함하고 있는데, 은닉화는 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것. 객체 내 메서드의 구현만 수정하고, 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 만들 수 있다. 절차적 코드의 경우 데이터의 형태가 바뀔 때에 코드의 흐름에 큰 영향을 미치게 되어 유지 보수가 어렵다. 그래서 더 엄격한 클래스는 속성의 직접적인 접근을 막고, 설정하는 함수(setter), 불러오는 함수(getter)를 철저하게 나눔.

OOP의 장점

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

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

상속 역시 불필요한 코드를 줄여 재사용성을 높임.

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

profile
도전자

0개의 댓글

관련 채용 정보