본문 바로가기

Javascript/9. 클래스와 객체

은닉성, getter 함수, setter 함수, 클래스의 상속, 정적 멤버변수, 정적 메서드, 싱글톤 패턴

반응형

1.   은닉성

멤버 변수나 메서드가 객체를 통해 접근할 수 없도록 클래스 내부에 숨기는 기법
ᅠᅠᅠ객체를 통한 멤버 변수로의 직접 접근이 소스코드 보안에 좋지 않아 멤버 변수를 은닉
ᅠᅠᅠᅠᅠᅠ--> 프로그램은 객체가 갖고 있는 값에 접근할 수 있는 방법 차단됨

멤버 변수나 메서드 앞에 #을 붙여 적용한다.

ᅠᅠPrivate 프로퍼티(or 멤버 변수) / Private 메서드

ᅠᅠᅠclass 클래스 이름 {
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ# 멤버 변수 1 ;
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ# 멤버 변수 2 ;
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ・・・
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ# 멤버 변수 n ;

ᅠᅠᅠᅠᅠᅠset 멤버 변수 1( value ) { this.# 멤버 변수 1 = value ; }
ᅠᅠᅠᅠᅠᅠget 멤버 변수 1( ) {
return this.# 멤버 변수 1; }

ᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠ・・・・・・

ᅠᅠᅠᅠᅠᅠset 멤버 변수 n( value ) { this.# 멤버 변수 n = value ; }
ᅠᅠᅠᅠᅠᅠget 멤버 변수 n( ) { 
return this.# 멤버 변수 n ; }
ᅠᅠᅠ}

 

ᅠᅠGetter & Setter

ᅠᅠᅠᅠᅠᅠ➞ 은닉된 멤버 변수에 접근하지 못하더라도 함수를 통해
ᅠᅠᅠᅠᅠᅠ간접적으로 할당, 반환을 수행할 수 있게 해주는 함수

getter 함수와 setter 함수를 이용하여 은닉된 멤버변수에 접근

★ ' login ' 메서드 함수의 ' this.userName ' 과 ' this.userEmail ' 은 변수처럼 보이지만 함수이다.
★ 이 둘은 ' setter ' 함수를 통해 값이 바뀌고 ' getter ' 함수의 return값이 대입된다.

 

 

 

2.   생성자 함수 / Getter 함수 / Setter 함수의 차이

getter와 setter를 사용하면 프로퍼티에 값을 할당하기 전
값의 적절성을 판단하는 처리과정을 추가할 수 있다.

함수의 용도
생성자함수 객체를 생성할 때 프로퍼티의 값초기화
Getter 함수 객체가 저장하고 있는 프로퍼티의 값조회
Setter 함수 객체가 저장하고 있는 프로퍼티의 값수정

 

 

 

3.   클래스의 상속

어떤 클래스의 기능을 다른 클래스에 상속시킨 후 추가적인 기능을 명시하여 기능을 확장하는 방법
class를 정의할 때 클래스 이름 뒤에 " extends " 키워드를 명시하고, 상속받고자 하는 ' 부모 class '의 이름을 지정

 

ᅠᅠ1. 기능의 확장으로서의 상속

ᅠᅠᅠᅠᅠᅠᅠᅠ-->  확장받을 클래스를 수정할 수 없을 때 사용

기능 확장의 클래스 상속

 

 

ᅠᅠ2. 여러 클래스 간의 공통 기능을 모아놓은 의미의 상속

ᅠᅠᅠᅠᅠᅠᅠᅠ-->  여러 개의 클래스들이 포함하는 기능 중 일부가 동일할 때
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ공통되는 부분을 독립적인 클래스로 추출하고, 그 클래스를 상속하여 공유할 때 사용

- 공통기능을 정의하는 부모 클래스
- 부모를 상속받는 자식 클래스(들)을 정의
- 자식 클래스에 대한 객체 생성
ᅠᅠ부모가 ' 생성자 파라미터 ' 를 통해 초기화를 수행하고 있다면,
ᅠᅠᅠᅠ그 생성자는 자식 클래스에도 상속된다.
ᅠᅠᅠᅠ그러므로 자식 클래스를 통한 객체 생성 시에도
ᅠᅠᅠᅠ부모가 요구하는 ' 생성자 파라미터 ' 를 전달해야 한다.

생성자 함수를 통한 클래스의 상속

 

 

ᅠᅠ3. 메서드 오버라이드( Override )

ᅠᅠᅠᅠᅠᅠᅠᅠ-->  자식 클래스에서 상속받은 부모 클래스의 메서드와 동일한 메서드를 사용하여 덮어쓰는 기법
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ즉, 상속 후 부모 클래스의 메서드 기능을 수정하는 것

메서드 오버라이드를 통한 클래스의 상속

 

ᅠᅠ4. ' super ' 키워드

ᅠᅠᅠᅠᅠᅠᅠᅠ-->  ① 부모 클래스의 기능과 자식 클래스의 기능을 둘 다 사용하고 싶을 때 사용
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ② 자식 클래스가 전달받은 파라미터와 추가적으로 생성한 파라미터
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ부모 클래스의 생성자로 전달하여 객체를 생성하는 방법에 변화를 줄 때 사용

ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ' super ' 키워드를 메서드처럼 사용할 경우에는 부모 클래스의 생성자 함수를 의미

ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ' this ' 키워드ᅠ➞ᅠ현재 클래스나 부모 클래스로 상속받은 자원을 가리키는 예약어
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ' super ' 키워드ᅠ➞ᅠ부모 클래스의 메서드를 Override 하는 자식 클래스 안에서 부모 클래스의 기능을 호출할 때 사용

 

 

4.   정적 멤버 변수, 정적 메서드

클래스에 속한 변수 or 함수에 객체 생성과 상관없이 항상 접근할 수 있는 기능
즉, 모든 객체에서 사용할 수 있는 공동 값이며 객체를 생성하기 전부터 존재
' static ' 키워드를 사용하여 클래스 이름으로 접근
' static ' 은 자기 자신을 값으로
담을 수 있다.

정적 멤버 변수와 정적 메서드를 통한 클래스의 상속

★ 전체 게시물 수 같은 것을 표현할 때 ' static ' 을 주로 사용 ★
★ 페이지에서 공통으로 사용되는 어떤 것을 작성할 때 사용( Ajax ) ★

 

5.   싱글톤 패턴 _ SingleTon Pattern

ᅠᅠᅠᅠclass 클래스 이름 {
ᅠᅠᅠᅠᅠᅠᅠᅠstatic #current = null ;
ᅠᅠᅠᅠᅠᅠᅠᅠstatic getInstance( ) {
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠif( 클래스 이름 . #current === null ) {
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ클래스 이름 . #current = new 클래스 이름( ) ;
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ}
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠreturn 클래스 이름 . #current ;
ᅠᅠᅠᅠᅠᅠᅠᅠ}
ᅠᅠᅠᅠ}

ᅠᅠᅠᅠᅠᅠᅠ--> 위 구조를 " 클래스 이름 " 만 변경하여 공식처럼 사용
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ기존의 객체가 없으면 생성하고, 있으면 아까 만들어놓은 객체를 계속하여 재사용

싱글톤 패턴을 사용한 클래스의 상속

계속해서 재사용 하여도 컴퓨터 메모리에 부담을 주지 않는다. ★

반응형