객체 지향 프로그래밍

Yeong·2023년 1월 13일
0

CS

목록 보기
1/12

📖 절차적 언어와 객체 지향 언어

절차적 언어는 순차적인 명령의 조합이며, 초기 프로그래밍 언어를 일반적으로 절차적 언어라고 부른다. (C, 포트란 등)

객제 지향적 언어는 "클래스"라고 부르는 데이터 모델의 청사진을 사용해 코드 작성하며, 현대의 언어들은 대부분 객체 지향의 특징을 가진다. (Java, C++, C# 등)
자바스크립트는 엄밀히 말해 객체 지향 언어는 아니지만, 객체 지향 패턴으로 작성할 수 있다.

객체 지향 프로그래밍은 순차적으로 변수와 함수를 작동하는 것을 넘어, 데이터의 접근과, 데이터의 처리 과정을 하나의 모형으로 만들어 데이터와 기능이 별개로 취급되지 않고, 한 번에 묶여서 처리할 수 있다.

📖 OOP

  • OOP는 프로그램 설계 철학이다.
  • OOP의 모든 것은 객체로 그룹화된다.
  • OOP의 4가지 주요 개념을 통해 재사용성을 얻는다.

🏷️ Encapsulation (캡슐화)

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

캡슐화라는 개념은 "은닉화"의 특징도 포함하고 있는데, 은닉화는 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것이다. 따라서, 디테일한 구현이나 데이터는 숨기고, 객체 외부에서 필요한 동작(메서드)만 노출시킨다.

🏷️ Inheritance (상속)

기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속받는다.
상속을 받게 되면 기본클래스 가진 속성과 메서드를 받고, 새로운 속성과 메서드를 추가할 수도 있다.

🏷️ Abstraction (추상화)

추상화는 내부 구현은 복잡하지만, 실제로 노출되는 부분은 단순하게 만든다는 개념이다. 너무 많은 기능이 노출이되면 예기치 못한 사용상의 변화가 일어날 수 있다.

클래스 정의 시, 메서드와 속성만 정의한 것을 인터페이스라고 부르는데, 이것 또한 추상화이다.

🏷️ Polymorphism (다형성)

다양한 형태를 가질 수 있다는 뜻으로 똑같은 메서드라 하더라도, 다른 방식으로 구현될 수 있다. 예를 들어 HTML Element라는 클래스에 render라는 메서드를 만들고 상속을 받게 만들면 자식 요소인 TextBox, Select, Checkbox에 따라 render가 다른게 작동하는 것이다.

🏷️ OOP의 주요 개념에 대한 장점

  • 캡슐화는 코드가 복잡하지 않게 만들고, 재사용성 높임
  • 추상화는 코드가 복잡하지 않게 만들고, 단순화된 사용으로 변화에 대한 영향을 최소화
  • 상속 불필요한 코드를 줄여 재사용성 높임
  • 다형성은 동일한 메서드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것을 가능하게함
profile
긍정적으로~✍️(◔◡◔)

0개의 댓글