Front-end/JavaScript

객체 지향 프로그래밍

NiceKHJ 2024. 7. 19. 11:39

객체 지향 프로그래밍 개요

 

객체 지향 프로그래밍 (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