본문 바로가기
개발 언어/TypeScript

06 TypeScript - Class

by 우주다람쥐 2018. 4. 6.
반응형

6. Class


Class는 자바에서 중요하게 다루는 객체 중 하나이다.

자바를 공부했다면 좀 더 이해가 쉬울 것 이다.

자바를 몰라도 이해할 수 있으나, 자바의 클래스에 대해 공부를 하고 이 글을 본다면 더 쉽게 이해할 것이다.



(1) 개념 및 기본 사용법


자바에서 클래스(class)란 객체를 정의하는 가장 큰 틀로 본다.

객체를 생성할 때 class를 생성하고 안에 변수와 메소드 등을 사용해서 구성한다. 


부가설명)

변수는 어떤 값을 저장할 수 있는 공간이며, 메소드는 특정한 작업을 수행하는 명령문의 집합이다.


기본 사용법은 다음과 같다.



Uname이라는 클래스에 username이라는 변수, constructor라는 생성자, getter, setter 메서드를 만든 예제이다.

생성자는 클래스를 생성할 때 사용하며, new Uname()의 형태로 생성한다.

getter, setter 메서드는 일반적으로 클래스를 생성하고 안의 값을 사용할 때 사용하는 메서드이다.



(2) 상속


클래스는 다른 클래스를 상속받아서 사용할 수 있다.

extends를 사용해서 상속받으면 되고, 생성자의 경우 꼭 super를 사용해서 초기값 세팅을 해줘야한다.



Emp 클래스를 상속받아 Manger 클래스를 만든 예제이다.

여기서 getEmp()는 부모의 메소드를 override하여 사용하고 있다.


override란 부모 클래스에서 만들어진 메소드를 자식 클래스에서 수정하여 사용하는 것을 말한다.



(3) static


static은 변수, 메소드 등을 어플리케이션이 실행될 때 생성되게 해준다.

아래에서 보면 클래스를 생성하지 않았으나 static 변수와 메소드를 이용해 사용하고 있는 것을 알 수 있다.



(4) 접근 지정자


TypeScript에서는 접근 지정자를 다음과 같이 사용한다.

- public : 어디서든 사용할 수 있다.

- private : 클래스 내부에서만 사용할 수 있다.

- protected : 상속 받은 클래스에서만 사용할 수 있다.


만약 접근 지정자를 지정하지 않으면 기본적으로 public으로 사용한다.



위의 예제에서 보면 변수 a는 어디에서든 사용할 수 있으며, b는 A 클래스에서만 사용할 수 있으며, c는 상속받은 B 클래스에서는 사용할 수 있다.


자바에서는 클래스 안에 변수를 선언할 때 일반적으로 private으로 선언해서 사용한다.

그리고 호출은 getter 메서드, 수정은 setter 메서드를 이용한다.


여담)

그래서 TypeScript도 비슷한 형태로 만들어봤다.

현업에서는 어떤 식으로 사용하는지는 모르겠지만 애초에 class 등의 자바에서 많이 사용하는 개념을 가져온 걸 보면

TypeScript는 JavaScript의 Java화인 것 같다는 느낌을 많이 든다.

(Off The Record / 그래서 TypeScript를 싫어하는 JavaScript 개발자가 좀(?) 있는 것 같다.)

현업에서 어떤 식으로 쓰는지 오픈 소스 등을 통해 알아보면 좋을 것 같다.



위에서 말한 것처럼 자바에서 쓰이는 형태로 변수는 private으로 지정하고 사용해봤다.

그리고 constructor에서도 접근지정자를 사용할 수 있다.



(5) implements interface


interface를 이용해서 클래스를 구현할 때는 implements를 사용한다.




(6) abstract class (추상클래스)


일반적으로 클래스는 세부적이고, 구체적이다.

그러나 추상 클래스는 구체적이지 않고 추상적이다.

아래 예제를 보면 makeSound() 메서드는 추상적으로만 정의되어 있는 걸 알 수 있다.

extends해서 사용하는 Cat 클래스에서 구체적으로 정의되는 걸 알 수 있다.



(7) Duck Typing


TypeScript에서는 Duck Typing이라는 내용을 제공한다.

두 객체가 같은 형태의 속성을 공유하면 두 객체는 같은 타입으로 간주한다. 

Duck typing은 객체의 실제 타입이 아닌 객체의 특정 속성의 존재 여부를 확인하여 적합성을 검사한다.


예시를 보면 이해가 좀 더 빠를 것이다.



구조가 같은 Parrot 클래스와 Sparrow 클래스는 서로 Duck Typing이 가능하다.

그러나 Duck 클래스의 경우 swim()이라는 메서드가 존재하므로 한쪽 방향으로만 Duck Typing이 가능하다.



Off The Record)

자바에서 핵심적으로 사용하는 class를 TypeScript에 입힌 걸 보면 자바 개발자의 음모(?)가 있는 것 같기도 하다.

TypeScript를 공부하는 이유는 AngularJS를 써보려는 목적이기 때문에 AngularJS를 본격적으로 공부하면 대충 감이 올 것 같다.

다음주에 TypeScript를 마무리하고, AngularJS를 공부하면서 다시 한번 정리해보록 하겠다.

반응형

'개발 언어 > TypeScript' 카테고리의 다른 글

08 TypeScript - module  (0) 2018.04.09
07 TypeScript - generic  (0) 2018.04.09
05 TypeScript - interface  (0) 2018.04.06
04 TypeScript - union  (0) 2018.04.06
03 TypeScript - function  (0) 2018.04.05

댓글