[DAY14] 객체 지향 1

m1njae·2022년 1월 16일
0

22 Basic Challenge

목록 보기
14/25
post-thumbnail

객체 지향이란?

객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나로서 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.

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

객체 지향 프로그래밍의 장점

  1. 코드 재사용이 용이하다.
    타인이 만든 클래스를 가져와서 이용할 수 있고, 상속을 통해 확장해서 사용할 수 있다.
  2. 유지보수하기가 쉽다.
    객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 존재하기 때문에 해당 부분만 수정하면 된다.
  3. 대형 프로젝트에 적합하다.
    클래스 단위로 모듈화시켜서 개발할 수 있으므로 대형 프로젝트처럼 여러 명, 여러 회사에서 프로젝트를 개발할 때 업무 분담하기 쉽다.

객체 지향 프로그래밍의 단점

  1. 처리속도가 상대적으로 느리다
  2. 객체가 많아지게 되면 용량이 커질 수도 있다.
  3. 설계 시에 많은 시간과 노력이 필요하다.

객체 지향 프로그래밍 키워드

  • 객체와 클래스
  • 추상화
  • 캡슐화
  • 상속
  • 다형성

이번 포스팅에서는 객체와 클래스, 추상화에 대해서 알아보도록 하자.

객체(Object)

객체에 대해서는 앞서 DAY5에서 간단하게 알아보았다. 첨언을 하자면, 객체는 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 프로그램에서 사용되는 데이터이다. 하나의 객체는 ‘어떤 것’을 의미하며 이러한 단위화된 표현을 통해 개발하는 것이 용이하다. 객체에는 특성을 부여할 수 있으며, 동작을 부여할 수 있다. 객체 지향 컨셉에서 대상의 특성은 객체의 속성(Property)라고 하며, 대상의 동작은 객체의 메소드(Method) 라고 한다. 또한, 객체는 인스턴스(Instance)라고도 한다.

예를 들어 본인을 하나의 객체로서 잡게 된다면 다음과 같이 표현할 수 있다.

var Kang_min_jae {
        name: "Kang min jae",
        age: 24,
	school: "Hanyang University"
	studentcode: 2018033018,
};

console.log(Kang_min_jae.school);
 // "Hanyang University"

클래스(Class)

어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성과 동작을 변수와 메서드로 정의한 것으로 객체를 만들기 위한 메타데이터라고 볼 수 있다.

메타데이터(MataData)란, 데이터에 관한 구조화된 데이터로, 다른 데이터를 설명해 주는 데이터이다. 어떤 데이터 즉 구조화된 정보를 분석, 분류하고 부가적 정보를 추가하기 위해 그 데이터 뒤에 함께 따라가는 정보를 말한다.

쉽게 예를 들자면, 객체 지향에서 클래스라는 개념은 일종의 틀이다. 예를 들어 클래스는 붕어빵 틀로, 객체는 그 틀로 찍어낸 붕어빵이라고 생각하면 이해하기 쉽다.

같은 클래스를 이용하여 서로 다른 객체들을 만들어낼 수 있으며, 이때 클래스는 하나의 템플릿처럼 사용된다.

var Student = function () { };

Student.prototype = { 
	name: String,
	age: Number,
	school: String,
	studentcode: Number,
};

var Kang_min_jae= new Student(); 

Kang_min_jae.name = "Kang_min_jae"; 
Kang_min_jae.age = 24;
Kang_min_jae.school = "Hanyang University;
Kang_min_jae.studentcode = 2018033018;

console.log(Kang_min_jae);
// {name:'Kang_min_jae', age: 24, school:'Hanyang University', studentcode: 2018033018}

하지만 JavaScript에는 클래스라는 개념이 없다. 기존의 객체를 복사하여 새로운 객체를 생성하는 프로토타입(prototype)의 언어이다. 즉, JavaScript의 모든 것들은 객체에 기반을 두고 있다.

전통적인 객체 지향 개념에서 "강민재라고 불리는 새로운 객체를 학생이라는 클래스를 이용하여 생성한다."라는 개념이, JavaScript 같은 프로토타입(prototype)객체 지향 언어에서는 "학생이라는 객체를 재사용하여 이것을 하나의 프로토타입으로서 강민재라고 불리는 새로운 객체를 생성한다." 라는 개념으로 조금은 바뀌어 설명될 수 있다.

자료의 추상화

공통의 속성이나 기능을 묶어 같은 종류의 다양한 객체를 정의하는 것이다. 즉, 클래스를 정의하는 것을 추상화라고 할 수 있다. 예를 들어 박지성, 손흥민, 조영욱, 김민재라는 객체들이 있을 때 이 객체들은 축구선수라는 클래스로 묶을 수 있다. 이 일련의 과정을 자료의 추상화라고 한다.

참고

profile
할 수 있는 것부터 차근차근, 항해자의 공부 기록공간

0개의 댓글