[Object Oriented Programming] 객체 지향 프로그래밍

zenoan·2021년 1월 28일
0
post-thumbnail

프로그래밍 언어를 사람들이 이해하고/사용하기 쉽게 만들어진 것이 객체 지향 언어다(예: Javascript, Python, Java, C#, C++, PHP, 등). 이 전에는 절차 지향 프로그래밍 언어만(예: C, COBOL, HTML, VBscript, 등) 사용됐다.

객체 지향 프로그래밍은 프로그래밍 철학중 하나다. 필요한 각 데이터와 기능들을 객체들로 만들어서 서로 상호작용 하면서 데이터를 처리하는 프로그래밍 방법이다.


객체 지향 프로그래밍을 설명하는 네가지 컨셉 및 특성들이 있다 :

  • Encapsulation 캡슐화
  • Abstraction 추상화
  • Inheritance 상속
  • Polymorphism 다형성

이 컨셉들을 요약해서 객체 지향 프로그래밍의 장점은 :

  1. 복합성 감소
  2. 코드의 재활용성(reusability)이 증가한다
  3. 필요없는 중복된 코드를 제거한다
  4. 사용하기 편하게 분리한다
  5. 사람이 보기 좋게 만든다

즉, 유지보수가 쉽고 대형 프로젝트에 적합하다

단점 :

  1. 객체가 많아지면서 용량이 커지고 처리속도가 상대적으로 느려진다
  2. 설계 시 더 많은 노력이 필요하다

기본 구성 :

  • 클래스 (Class) : 데이터를 추상화해서 같은 종류/그룹에 속성과 행위를 정의한 것이다. 이때 속성은 변수, 행위는 메소드를 말한다.
  • 객체/인스턴스(instance) : 클래스에서 선언된 속성을 및 행위를 상속 받고 사용되는 데이터.

예) 동물 클래스에서 생성된 강아지 객체 또는 하위 클래스 :

class Animal {
	constructor(mood, hunger, energy) {
		this.mood = mood
		this.hunger = hunger
		this.energy = energy
	}
	eat() {
			this.mood ++
			this.hunger ++
	}
	sleep() {
			this.hunger ++
			this.energy ++
	}
	play() {
			this.mood ++
			this.energy --
	}
};

let dog = new Animal(10, 10, 10);
dog.eat();
console.log(dog.mood); // 11
console.log(dog.hunger); // 11
dog.play();
console.log(dog.mood); // 12
console.log(dog.hunger); // 10

let cat = new Animal(8, 8, 8);
dog.eat();
console.log(dog.mood); // 9
console.log(dog.hunger); // 9
dog.play();
console.log(dog.mood); // 10
console.log(dog.hunger); // 8


강아지 : 동물 클래스의 하위 클래스 / 새로운 객체
기분, 배고픔, 에너지 : 속성/변수
먹기, 자기, 놀기 : 행위/메소드

Encapsulation (캡슐화)

  • 캡슐화는 클래스의 생성이라고 생각하면된다. 데이터와 함수들을 하나의 객체 안에 모아서 묶는 것.
  • 목적 : 클래스라는 캡슐에 필요한 속성과 기능을 분류하고 모아서 넣고 계속 재활용 하기 위해.

Abstraction (추상화)

  • 추상화는 캡슐화의 자연스러운 연장선이다. 추상화를 위해 필요한 것만 캡슐화 하는 것이다.
  • 목적 : 추상화 과정을 통해, 복잡하게 만든 객체를 더 쉽게 사용할 수 있다. 예) 스마트폰은 사용자가 이해하기 힘든 소프트웨어/하드웨어로 만들어졌지만 사용하기에는 쉽게 만들어졌다.
  • 규모가 커지고 코드 베이스를 유지보수를 계속 하기 위해서는 추상화 과정이 꼭 필요하다.

Inheritance (상속)

  • 상속은 상위클래스의 속성과 기능을 이어 받아 재사용 할 수 있게 하고, 새롭게 만들어진 해당 자식클래스의 기능을 수정 또는 새로운 기능을 추가 할 수 있게하는게 상속이다.
  • 목적 : 코드의 중복을 없애기 위함. 중복 코드를 작성하는 것도 힘들지만 유지 보수에도 비용이 든다.

Polymorphism (다형성)

  • 다형성은 각 자식클래스의 상황에 맞게 상속 받은 변수/함수 등이 다르게 정의되고 다른 결과가 나오는 것을 말한다.
  • 목적 : 상속과 같은 이유로, 코드의 중복을 없애고 유지보수의 비용이 줄어든다.
  • 동물이라는 상위클래스에서 자식클래스 강아지 와 고양이가 있으면. '울음' 이라는 속성은 강아지는 '멍멍'이 될 수 있고, 고양이는 '야옹'이 될 수 있다는 것이다.
profile
프론트엔드 개발자

0개의 댓글