객체 지향 프로그래밍 개요
객체 지향 프로그래밍 (Object-Oriented Programming)
- 객체 지향 프로그래밍은 '객체' 간의 상호작용을 중심으로 데이터를 처리하는 프로그래밍 개발 방법이다.
- 현실 세계가 다양한 객체들의 상호작용으로 운영되듯이 프로그램도 여러 개의 독립된 단위인 '객체' 들의 모임으로 파악하고자 하는 프로그래밍 방식이다.
- 객체 지향 프로그래밍은 현실 세계를 모방한 것이다.
객체 (Object)
- 실생활에 존재하는 명사형의 모든 실체(사람,사물,개념 등)를 말한다.
- 예 : 자동차, 도서, 학생, 학과, 성적, 수강, 회원, 상품, 장바구니, 주문, 은행계좌 등
- 객체의 특징 :
- 식별 가능한 이름이 있으며 관련된 상태정보(속성)와 행위를 가진다.
- 속성 : 예를 들어, 학생의 이름, 학과 , 학번 등
- 행위 : 예를 들어, 수강하기, 시험보기, 보고서 제출 등
객체 지향 프로그래밍의 장점
- 객체 단위의 자연스럽고 유연한 프로그래밍이 가능하다.
- 한번 정의된 객체는 재사용을 통해 개발 생산성을 높일 수 있으며 유지보수 및 확장이 용이하다.
- 프로그램을 유연하고 변경을 용이하게 만들어 대규모 소프트웨어 개발에 많이 사용된다.
- 예 : 레고 블록 조립하듯이 , 컴퓨터 부품(키보드 , 마우스 등)을 교체하듯이 유연하게 변경하면서 개발 가능하다.
- 소프트웨어 개발 과정 (요구 정의 -> 분석 -> 설계 -> 구현 -> 테스트/디버깅 -> 배치) 에서 자연스러운 분석 및 설계가 가능하다.
객체 지향 프로그래밍 구성 요소
현실 세계의 객체 (Object)
- 현실 세계에 존재하는 명사형의 모든 실체(사람, 사물, 개념 등)를 말한다.
소프트웨어 객체 (Instance)
- 현실 세계에 존재하는 객체를 프로그램으로 표현한 기본 단위이다.
- 객체의 상태정보를 저장하기 위한 '변수(프로퍼티)'들과 객체의 행위를 나타내는 '함수(메서드)'들을 포함하는 복합체이다.
- 자바스크립트에서 기본 자료형(string, number, boolean, symbol, null, undefined)이 아닌 것은 모두 객체이다.
메시지 (Message)
- 객체들은 각각 독립적이며 메시지 송수신을 통해 상호작용한다.
객체 지향 프로그래밍
- 객체 지향 프로그래밍은 프로퍼티와 메서드로 이루어진 각 개체들의 상호작용을 중심으로 코드를 작성하는 것이다.
절차 지향 vs 객체 지향
절차적 프로그래밍 (Procedural Programming)
- 예 : Basic, Cobol, C 등
- 문제를 기능 위주의 관점으로 바라보며, 변수와 함수를 가지고 작업의 순서에 맞게 해결책을 찾아가는 프로그래밍 기법이다.
- Programs = Data Structures + Algorithms (데이터와 함수의 분리)
객체 지향 프로그래밍 (Object-Oriented Programming)
- 예 : Smalltalk, JavaScript, Java, C++, C# 등
- 문제를 데이터 위주의 관점으로 바라보며, 프로퍼티와 메서드로 이루어진 각 개체들의 상호작용을 중심으로 해결책을 찾아가는 프로그래밍 기법이다.
- Programs = Object + Object + Object (데이터와 기능의 통합)
- 전통적인 절차적 프로그래밍을 대체하기 위해 1970년도에 개발되었다.
객체 지향 프로그래밍 절차
객체 모델링
- 프로그램으로 표현하고자 하는 현실 세계 객체의 이름, 속성, 행위, 상호작용 등을 이해하기 쉬운 도형과 기호를 이용하여 표현한다.
- 객체 모델 작성을 위해 UML 모델링 언어를 사용한다.
객체 정의
- 현실 세계의 객체를 프로그램으로 표현한다.
객체 사용
- 메모리상에 생성된 객체들을 사용하고 객체들 간의 상호작용에 의해 프로그램을 구현한다.
객체 지향 프로그래밍 예시
요구 분석 및 설계 단계에서의 객체 모델링
- 현실 세계의 객체가 가지는 속성과 행위를 UML 클래스 다이어그램을 이용하여 이해하기 쉽게 표현한다.
은행계좌 (Account)
- 속성:
- 계좌번호 (accountNum: string)
- 예금주 (accountOwner: string)
- 비밀번호 (passwd: number)
- 잔고 (balance: number)
- 행위:
- 입금하기 (deposit(money: number): number)
- 출금하기 (withdraw(money: number): number)
- 잔액 조회하기 (getRestMoney(): number)
- 비밀번호 확인하기 (checkPasswd(passwd: number): boolean)
const Account = {
create(accountNum, accountOwner, passwd, balance) {
return {
accountNum,
accountOwner,
passwd,
balance,
deposit(money) {
this.balance += money;
return this.balance;
},
withdraw(money) {
if (money <= this.balance) {
this.balance -= money;
return this.balance;
} else {
console.log("Insufficient balance");
return this.balance;
}
},
getRestMoney() {
return this.balance;
},
checkPasswd(passwd) {
return this.passwd === passwd;
}
};
}
};
// 객체 생성 및 사용 예시
let myAccount = Account.create("123-456-789", "John Doe", 1234, 1000);
console.log(myAccount.deposit(500)); // 1500
console.log(myAccount.withdraw(200)); // 1300
console.log(myAccount.getRestMoney()); // 1300
console.log(myAccount.checkPasswd(1234)); // true
'Front-end > JavaScript' 카테고리의 다른 글
JavaScript 모듈(Module) (0) | 2024.07.22 |
---|---|
자바스크립트 객체 (2) | 2024.07.19 |
JavaScript ( 함수 정리2) (0) | 2024.07.18 |
JavaScript ( 함수 정리 ) (0) | 2024.07.16 |
JavaScript ( 제어문 ) (0) | 2024.07.15 |