객체지향 프로그래밍

WONNY_LOG·2023년 10월 24일
0

객체지향 프로그래밍이란?

프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

실세계에 존재하고 인지하고 있는 객체를 소프트웨어의 세계에서 표현하기위해 객체의 핵심적인 개념, 기능만 추출하는 추상화를 통해 모델링하려는 프로그래밍 패러다임이다.
즉, 우리가 사물을 인지하는 방식을 프로그래밍에 접목하려는 사상이다.

  • 컴퓨터 프로그래밍의 패러다임 중 하나
  • 컴퓨터 프로그래밍을 명령어의 목록이 아닌, 여러 개의 독립된 단위 (객체)들의 모임으로 파악한다
  • 각각의 객체는 메세지를 주고 받고, 데이터를 처리할 수 있다
  • 프로그램을 유연하고 변경이 쉽게만들기때문에 대규모 소프트웨어개발에 많이 사용된다
  • 유지 보수 간편, 보다 직관적인 코드 분석을 가능하게 한다

객체 지향 프로그래밍 언어

C++ , C# , Java , Python ,Dart , Ruby , Swift 등이 있다.

특징?

추상화

불필요한 정보는 숨기고 중요한 정보만 표현함으로써 프로그램을 간단히 만드는 것


추상화로 'car'를 구현해두면 car class에 volvo,nissan과 같은 브랜드 네임만 추가하여 객체를 생성할 수 있다.

  • 객체에서 공통된 속성과 행위를 추출
  • 공통의 속성과 행의를 찾아서 타입을 정의

캡슐화

객체의 속성과 행위를 하나로 묶고, 실제 구현 내용 일부를 내부에 감추어 은닉하는 것

속성과 기능을 정의하는 변수와 메소드를 클래스라는 캡슐에 넣어 분류함. 때문에 재활용이 용이하고 이를 통해 정보은닉을 활용할 수 있다.

  • 데이터 구조(변수)와 데이터를 다루는 방법들(함수)을 결합 시켜 묶는 것
  • 낮은 결합도를 유지할 수 있도록 설계

상속

새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게하는 것

  • 클래스의 속성과 행위를 하위클래스가 물려받아 데이터와 연산을 이용할 수 있게하는 기능
  • 재사용으로 코드가 줄어들고 범용적으로 사용이 가능하며 자료와 메서드의 자유로운 사용 및 추가가 가능하다
  • 그러나, 상위 클래스의 변경이 어렵고 불필요한 클래스가 증가할 수 있으며 상송이 잘 못 사용될 수도있다

다형성

어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩이나 오버로딩을 의미한다객

  • 객체지향 프로그래밍은 하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나 상위 클래스의 행위를 하위클래스에서 재정의하여 사용할 수 있다

오버라이딩

  • 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 것

오버로딩

  • 같은 이름의 메서드가 인지나 개수나 자료형에 따라 다른 기능을 하는 것

장점

  • 클래스 단위로 모듈화시켜 개발하기 때문에 업무 분담이 편리하고 대규모 소프트웨어 개발에 적합
  • 클래스 단위로 수정이 가능하기 때문에 유지보수 편리
  • 클래스를 재사용하거나 상속을 통해 확장하므로써 코드 재사용이 용이

단점

  • 처리속도가 상대적으로 느림
  • 객체의 수가 많아짐에 따라 용량이 커질 수 있음
  • 설계가 어렵다

객체지향적으로 설계하기 위해선 SOLID 원칙을 지켜야한다 !


자바스크립트는 객체지향 프로그래밍 언어인가?

Javascript는 완전한 객체 지향 언어이다.

자바스크립트는 클래스 개념이 없어서 다른 객체지향 프로그래밍언어들과 차이가 있다. 하지만, 별도의 객체 생성 방법들이 존재한다.

  • 객체 리터럴
  • Object() 생성자 함수
  • 생성자 함수
// 객체 리터럴
var obj1 = {};
obj1.name = 'Lee';

// Object() 생성자 함수
var obj2 = new Object();
obj2.name = 'Lee';

// 생성자 함수
function F() {}
var obj3 = new F();
obj3.name = 'Lee';

자바스크립트는 이미 생성된 인스턴스의 자료구조와 기능을 동적으로 변경할 수 있다.
객체지향의 상속, 캡슐화 등의 개념은 프로토타입 체인과 클로저 등으로 구현할 수 있다.

자바스크립트는 클래스, 생성자, 메소드 모두 함수로 구현 가능하다.

0개의 댓글