본문 바로가기

플밍 is 뭔들/JavaScript&jQuery

[JavaScript] 자바스크립트 객체지향 프로그래밍 기초

※ 절차지향 프로그래밍 vs 객체지향 프로그래밍
 
  - 절차지향 프로그래밍
    여러개의 작은 함수로 나누어 작성, 함수들을 원하는 순서에 맞게 작성하는 방식
    전역데이터를 공유해 사용하므로 데이터가 잘못 처리될 수 있음. 하지만 소규모 프로젝트에선 사용하기 편함
절차지향 프로그래밍의 형태

var 전역데이터1 = 값;
var 전역데이터2 = 값;
var 전역데이터3 = 값;

함수1(전역데이터1);
함수2(전역데이터1);
함수3(전역데이터2);
함수4(전역데이터3);
....


  - 객체지향 프로그래밍
    여러개의 객체단위로 나눠 작업하는 방식, 클래스를 이용하여 연관있는 함수와 변수를 하나로 묶어 객체(인스턴스)를 
    생성해 사용.
    개발자와 협업하는 규모가 큰 프로젝트에 사용하기 좋다


※ 객체지향 프로그래밍의 특징
  1. 추상화 : 클래스를 설계할 때 예상되는 프로퍼티와 메서드를 정의 하는 작업.
  2. 캡슐화 : 추상화 작업중 외부에서 접근하지 못하게 해야하는 경우가 있는데 이 작업을 캡슐화라 한다.
  3. 상속 : 부모 클래스의 속성과 메서드를 자식클래스가 물려받는 것.
  4. 다형성 : 여러가지 형태를 가질 수 있는 능력, 한 타입의 참조변수로 여러 타입의 객체를 참조 할 수 있다.

※ 객체지향 프로그래밍 언어에서 제공하는 기본 기능

  1. 클래스(class)
  2. 인터페이스(interface)
  3. 추상클래스(abstract class)

  - 클래스란?
    연관 있는 변수와 함수를 묶어 재사용하기 위해 사용하는 문법, 실제 객체의 동작을 처리하는 구현 부분 
    자바스크립트에선 오브젝트 리터럴 방식, 함수 방식, 프로토타입 방식으로 클래스와 비슷하게 만들어 사용한다.    

  - 인터페이스란?
    구현 부분 없이 오직 객체가 반드시 구현해야 할 메서드를 명시해놓은 명세서로써 선언 부분에 속한다. 
    인터페이스에 연결된 클래스는 반드시 인터페이스에 명시된 메서드의 구현 부분을 작성해야 한다.
    자바스크립트에선 인터페이스를 지원하지 않는다. 그렇기 때문에 인터페이스가 있다는 가정 하에 코딩해야 한다.
ex)
//인터페이스
public interface Class1{

    //인터페이스와 연결된 클래스가 구현해야 할 메서드를 선언
    public void method1();
    public String method2(String value1);
}

//클래스 (Class1 인터페이스와 연결됨)
public class Class2 implements Class1{

    //인터페이스에 명시된 메서드 구현

    public void method1(){
        //기능구현
    }

    public String method2(String value2){
        //기능구현
    }

    ....

}
  

  - 추상클래스란?
    상속시 부모클래스에서는 구현을 하지 않지만 부모클래스를 상속받은 자식클래스에서 구현을 강요 했으면 하는 
    기능을 명시해놓은 클래스.
    일반 클래스처럼 선언 부분과 구현 부분이 존재한다.  자식클래스에서 구현 했으면 하는 메서드를 추상 메서드로 
    선언해놓은 부분도 있다. 구현 부분, 선언 부분 모두 존재한다.
    자바스크립트에선 추상클래스를 지원하지 않는다. 그렇기 때문에 추상클래스가 있다는 가정 하에 코딩해야 한다.
ex)
//부모클래스
abstract class Class1{
    
    //프로퍼티 생성
    private String value1= "";
    private int value2 = 0;

    //생성자
    public Class1(String value1, int value2){
        this.value1 = value1;
        this.value2 = value2;
    }

    //메서드 구현
    public void method1(){
        //메서드의 기능을 구현한다.
    }
    
    //추상 메서드 선언
    abstract void method2(value2);
}

//자식클래스(Class1 클래스를 상속받음)
public class Class2 extend Class1{
    
    //추상메서드 구현부분
    public void method2(String value2){
        //추상 메서드의 기능을 구현한다.
    }

    ....

}



※ UML로 클래스, 인터페이스, 추상클래스 표현