OOP란 객체지향프로그래밍을 의미합니다.
대표적인 객체지향언어로는 Java가 있죠.
하지만 파이썬이나 JS또한 객체지향적으로 사용할수 있습니다.
객체는 사물을 의미하는데 일상에서보면 책상이나 의자 등이 객체가 되겠네요!
온라인 쇼핑몰 사이트에는 상품을 볼수도 있고 장바구니에 담을수도 있으며 장바구니에 담기전 찜하기 기능등 다양한 기능이 있습니다.
프로젝트의 규모가 커지면 커질수록 코드를 잘 짜고 정리해야하며 이렇지 못할경우 스파게티 코드가 되어 유지보수가 어렵게 됩니다.
객체지향 프로그래밍은 이러한 문제를 해결하기위해 연관된 변수와 함수들을 한 덩어리로 묶어서 구조화하여 표현하는 프로그래밍을 말합니다.
객체지향프로그래밍에서는 Class와 Object의 관계가 아주 깊습니다.
객체는 Class를 통해 만들어 지며 Class는 객체의 설계도와 같다고 보실수 있습니다.
let fullName: string;
let age: number;
let jobTitle: string;
let hourlyRate: number;
let workingHoursPerWeek: number;
let printEmployeeDetails = (fullName: string, jobTitle: string, hourlyRate: number, workingHoursPerWeek: number): void => {
console.log(`${fullName}의 직업은 ${jobTitle} 이고 일주일의 수업은 ${hourlyRate*workingHoursPerWeek} 달러 이다.`);
}
어떤 사람에 대한 정보를 담을수 있는 변수들과 이 정보를 콘솔로 출력할수있는 함수가 있습니다.
이 변수와 함수를 하나로 묶어서 class로 만들수가 있습니다.
class Employee {
fullName: string;
age: number;
jobTitle: string;
hourlyRate: number;
workingHoursPerWeek: number;
printEmployeeInfo = (): void => {
console.log(`${this.fullName}의 직업은 ${this.jobTitle} 이고 일주일의 수업은 ${this.hourlyRate*this.workingHoursPerWeek} 달러 이다.`)
}
}
printEmployeeInfo 함수에 인자를 모두 삭제했는데 이는 클래스 내에있는 변수들을 this키워드를 통해 사용할수 있기 때문입니다.
클래스 속에서 정의된 함수들은 상대적으로 적은 매개변수를 가진다는 장점이 있습니다.
매개변수가 적을수록 쉽게 함수를 사용할수 있고 쉬운 유지보수가 가능합니다.
또한 이렇게 클래스 내에 정의된 변수들을 프로퍼티(Property)라고 하며 클래스 내에 정의된 함수를 메소드(Method)라고 합니다.
이런 클래스는 객체를 만들기위한 설계도의 역할을 하는데요.
클래스를 통해 객체를 생성할때 흔히 클래스의 인스턴스를 생성한다고 합니다.
class Employee {
fullName: string;
age: number;
jobTitle: string;
hourlyRate: number;
workingHoursPerWeek: number;
printEmployeeInfo = (): void => {
console.log(`${this.fullName}의 직업은 ${this.jobTitle} 이고 일주일의 수업은 ${this.hourlyRate*this.workingHoursPerWeek} 달러 이다.`)
}
}
let employee1 = new Employee();
employee1.fullName = 'Cine';
employee1.age = 20;
employee1.jobTitle = 'developer';
employee1.hourlyRate = 40;
employee1.workingHoursPerWeek = 35;
employee1.printEmployeeInfo();
객체를 만들기 위해서 선언된 class 아래에 let 키워드를 작성해주고 생성할 객체의 이름을 정의해줍니다.
그리고 new 키워드를 이용하면 객체를 생성할수 있는데요.
자바나 다른언어에서도 흔히 볼수 있는 문법입니다.
이렇게 생성된 employee1 객체는 Employee 안에 선언된 프로퍼티와 메서드를 사용할수 있습니다.
또한 employee1에 선언된 프로퍼티에 값을 할당해주고 메서드를 호출해주면 console에 원하는 값이 나오게 됩니다.
'TS 관련 > TypeScript' 카테고리의 다른 글
[TypeScript] 접근 제한자(Access Modifiers), Getter와 Setter (0) | 2022.07.20 |
---|---|
[TypeScript] 생성자(Constructor) (0) | 2022.07.19 |
[TypeScript] 옵셔널(optional) ?, 선택적 매개변수 (0) | 2022.07.17 |
[TypeScript] Union Type(유니언 타입), Type Alias, 타입가드 (0) | 2022.07.16 |
[TypeScript] Enum(열거형)과 리터럴 타입 (0) | 2022.07.15 |