객체와 객체 지향 프로그래밍에 대한 분석
목차
1.
주제 선정 이유
2.
객체란 무엇인가?
2-1). 객체의 정의 및 구조
2-2). 참조의 정의
3.
객체 지향 프로그래밍
3-1). 객체 지향 프로그래밍 언어의 특징
3-2). 객체 지향 프로그래밍 언어의 장점
번외). 함께 알아두면 좋은 용어
Ⅰ. 주제 선정 이유:
자바스크립트가 객체 지향 언어라는 것은 다들 알고 있을 것이다. 그럼 여기서 말하는 객체란 과연 무엇인가?
우리가 알고 있는 객체는 키와 값으로 이루어진 중괄호 라고 알고있는데, 이에 대해 자세히 파악하여 수업을 하거나 협업을 할 때, 보다 더 원활하게 소통할 수 있도록 돕고자 조사해봤다.
Ⅱ. 객체
2-1). 객체의 정의 및 구조
•
객체 : 프로그래밍 언어에서 데이터나 함수를 담아내는 참조 자료형으로, 프로퍼티와 메서드로 이루어져 있다.
•
프로퍼티 : 객체의 상태 데이터를 나타내는 값으로, 키(key)와 값(value)로 이루어져 있다. 프로퍼티와 유사한 용어로, 속성(attribute)이 있다.
•
메서드 : 프로퍼티 중, 값이 함수인 경우, 다른 함수와 구분하기 위해 해당 프로퍼티를 메서드라고 부른다.
2-2). 참조의 정의 및 예시
참조 : 값이 담긴 메모리 주소를 가져온다는 것을 의미, 결국 객체는 식별자(변수)에게 값이 아닌 메모리 주소만 알려주기에 참조 자료형 이라고 한다.
※객체의 주소를 비교하면 다르지만, 객체의 속성(프로퍼티)에 접근하여 값을 비교하면 같다!
// 예시 1. 객체의 주소 비교와 속성 값 비교
let person1 = { age: 27,
name : Daniel};
let person2 = { age: 27,
name : Daniel};
person1 === person2 // 객체 person1과 person2의 주소는 다르기에 false
person1.age === person2.age // 객체 person1과 person2의 age는 27로 같기에 true
JavaScript
복사
Ⅲ. 객체 지향 프로그래밍
•
객체 지향 프로그래밍 : 데이터나 함수를 하나의 객체 단위로 묶은 독립된 객체간의 상호작용을 하는 프로그래밍 방식
•
객체 지향 프로그램 언어 : C++, Java, JavaScript...
도대체 왜 객체 지향 프로그래밍 언어를 사용하는 것인가?
3-1). 객체 지향 프로그래밍 언어의 특징
1). 상속
•
어떤 객체의 프로퍼티나 메서드를 다른 객체가 그대로 사용할 수 있게 해주는 것
•
상속을 통해 코드의 재사용성이 높아지며, 클래스 간의 계층구조를 만들어 관리하기 쉬워짐
2). 캡슐화
•
중괄호 라는 범위 안에, 객체의 키와 값을 짝지어서 타인이 함부로 객체의 값을 수정하거나 삭제하는 것을 방지한다.
3). 다형화
•
여러 객체가 하나의 메서드를 호출해도, 실행 결과가 객체마다 다르게 나타나는 특징이 있다.
•
하나의 메서드를 메서드 오버라이딩을 통해 다양한 결과를 만들 수 있어, 코드의 재사용률을 높인다.
※ 메서드 오버라이딩 : 상속 관계에서 부모 클래스의 메소드를 자식 클래스에서 재정의하여 사용하는 것
class Animal { // 부모 클래스
constructor(name) {
this.name = name;
}
speak() { // 처음 선언한 메서드
console.log(`${this.name} makes a noise.`);
}
}
class Dog extends Animal { // 자식 클래스
speak() { // 같은 명의 클래스를 재정의 -> 다형화
console.log(`${this.name} barks.`);
}
}
class Cat extends Animal {
speak() { // 같은 명의 클래스를 재정의 -> 다형화
console.log(`${this.name} meows.`);
}
}
const animals = [new Dog('Rufus'), new Cat('Mittens')];
animals.forEach(animal => {
animal.speak();
});
JavaScript
복사
4). 추상화
•
객체의 핵심적인 특징을 강조하고, 불필요한 부분을 생략하는 것
•
객체를 단순화시키고, 객체가 내부적으로 어떻게 구현되었는지 숨기기 때문에 코드의 가독성과 안정성이 향상
3-2). 객체 지향 프로그래밍 언어의 장점
1). 재사용성
•
객체간에 계층이 부여되면 상속을 할 수 있고, 그 과정에서 공통된 코드는 다시 작성할 필요가 없어 구동 시간이나 로딩 시간이 상당히 절약됨
2). 가독성
•
객체지향 프로그래밍에서는 객체의 속성과 메서드를 명확하게 정의하고, 객체 간의 상호작용을 명확하게 표현 가능
•
이를 통해 코드의 가독성이 높아지며, 코드의 이해 및 유지보수가 용이해짐
3). 유지보수성
•
객체지향 프로그래밍에서는 코드를 객체 단위로 모듈화하여 작성하기 때문에, 수정이나 추가를 할 때 해당 객체만 수정하면 되기에 관리에 용이
※ 모듈화 : 코드를 하나의 파일에 작성하는 것이 아니라, 나누어 마치 조립하듯이 구조화시키는 것을 의미
•
자바스크립트의 경우, ES6(ES2015)의 모듈 방식을 주로 사용하는데, 이는 import와 export를 사용하는 방식이며, 이를 위해 Babel과 같은 도구를 사용하여 코드를 컴파일해야 함
// myModule.js // 보내는 모듈
export const foo = function() {
console.log("Hello, World!");
};
export const bar = function() {
console.log("Bye, World!");
};
// app.js // 받는 모듈
import { foo, bar } from './myModule';
foo(); // "Hello, World!" 출력
bar(); // "Bye, World!" 출력
JavaScript
복사
번외). 함께 알아두면 좋은 용어
1. Babel
•
자바스크립트 코드를 컴파일러로 변환해주는 오픈소스 도구
•
주로 최신 버전의 자바스크립트 코드를 예전 버전으로 변환하여, 구형 브라우저에서도 실행 가능한 코드로 변환하는데 사용
2. 컴파일러(Compiler)
•
프로그래밍 언어로 작성된 소스 코드를 기계어로 변환해주는 소프트웨어
•
자바스크립트의 경우, 인터프리터 언어라서 별도의 컴파일러가 필요
3. 인터프리터 언어
•
프로그램의 소스 코드를 직접 실행하는 언어로, 컴파일러와는 달리 컴파일 과정 없이 소스 코드를 바로 실행
•
대표적인 인터프리터 언어 : JavaScript, Ruby, PHP...
•
코드를 한 줄 한 줄씩 읽어 들이며 실행하기에 명령 자체의 속도는 컴파일러 언어에 비해 느리다는 단점이 있음
•
오류 발견 즉시 해결할 수 있다는 장점이 있음