2 minute read

2022.11.19

💡 오늘의 JavaScript 공부

▶️ 객체 지향 프로그래밍

OOP ( Object Oriented Programmin )

OOP는 프로그램 설계 철학 중 하나이다. 객체로 그룹화 되며 이 객체는 한번 만들고 나면, 메모리상에서 반환되기 전까지 객체 내의 모든 것이 유지된다.

📌 OOP Basic Concepts
  • Encapsulation ( 캡슐화 )
  • Inheritance ( 상속 )
  • Abstraction ( 추상화 )
  • Polymorphism ( 다형성 )

애플리케이션을 만들 때 좋은 설계를 하기 위해서는 기본적으로 위 객체지향을 이해하고 응용하는 것이 중요하다. 크게 4가지 기본 개념이 있다.

Encapsulation ( 캡슐화 )

  1. 데이터와 기능을 하나의 단위로 묶는 것

  2. Hiding 은닉을 통해 구현은 숨기고 동작을 노출시킨다.

  3. 느슨한 결합에 유리하다. 즉 언제나 구현을 수정할 수 있다.

캡슐화는 데이터 ( 속성 ) 와 기능 ( 메서드 ) 을 따로 정의하는 것이 아닌, 하나의 객체 안에 넣어서 묶는 것이다. 이러한 느슨한 결합은 코드의 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미한다.

캡슐화는 은닉화의 특징도 포함하는데 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것이다. 이렇게 해야 객체 내 메서드의 구현만 수정하고, 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 만들 수 있다.

Inheritance ( 상속 )

상속은 부모 클래서의 특징을 자식 클래스가 물려받는 것이다.

예를 들어 사람이라는 클래스가 있다고 가정한 뒤 추가적으로 학생이라는 클래스를 작성한다고 생각해보자. 여기서 앞에 구현했던 사람 클래스의 속성과 메서드를 다시 구현한다면 비효율적이기 때문에 학생의 본질은 곧 사람이므로 상속을 통해 학생 클래스에는 학습내용, 공부하다와 같은 속성/메서드만 추가하면 되는 것이다.

Abstraction ( 추상화 )

추상화는 말 그대로 내부구현은 복잡하지만 실제로 노출되는 부분은 단순하게 만든다는 개념이다.

컴퓨터도 그 내부의 구조는 굉장히 복잡하지만 실제로 노출되는 부분은 우리가 사용하기 쉽다. 더 쉽게 얘기하면 우리는 카톡을 보낼때 메세지를 입력하고 전송버튼만 누를줄 알면 사용할 수 있다. 그 내부의 데이터가 어디로 전송되며 어디를 거치는지는 알지못한다. 이것이 바로 추상화이다.

Polymorphism ( 다형성 )

다형성을 HTML 엘리먼트로 예를 들자면 DOM을 배울 때 Textarea(TextBox), Select, 그리고 Checkbox 등을 배웠는데 HTML에서는 이와 같이 모든 요소를 전부 Element라고 부른다.

이 엘리먼트를 직접 구현한다고 생각해보면 모든 엘리먼트들은 전부 객체이므로, 내부적으로 모양을 그리고 화면에 뿌리는 메서드가 존재할 것이다. 이 메서드의 이름을 render라고 가정하면 TextBox, Select, Checkbox의 공통의 부모인 HTML Element라는 클래스에 render라는 메서드를 만들고 상속을 받게 만들 수 있다. 그런데 다형성의 핵심은 이 같은 이름의 render라는 메서드가 조금씩 다르게 작동한다는 데 있다. TextBox는 가로로 긴 네모 상자와 커서가 있는 형태일 것이고, Select 박스는 눌렀을 때 선택지가 나오도록 화면에 그려야 할 것이다. 이처럼 같은 이름을 가진 메서드라도 조금씩 다르게 작동하는 것, 이것이 바로 다형성이다.

📌 OOP 요약

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

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

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

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

Comments