SlideShare a Scribd company logo
1 of 42
Scala trait 용도
추상 속성과 메소드 정의
자바 인터페이스 대용
Trait 내부에 함수 타입만 정의하면 추상 메소드로
인식하므로 클래스에서 이를 구현해야 함
속성 정의
메소드 정의
추상 속성
추상 속성을 정의하고 구현클래스에서 상속을
받아 구현을 해서 사용한다.
추상 메소드 대용
Trait 내부에 메소드 타입만 정의하면 추상 메소드로
인식하므로 클래스에서 이를 구현해야 함
제너릭 메소드: 추상
Trait 내부 메소드의 매개변수를 제너릭으로 처리할
경우 실제 구현에서 match를 이용해서 타입 체크
추상 과 구현
속성과 메소드 정의
자바 추상 클래스 대용
Trait 내부에 추상 및 구현 속성과 추상 및 구현
메소드를 혼용해서 사용
속성 정의 및 구현
메소드 정의 및 구현
Trait에 구현된 속성 상속
Trait에 구현된 속성을 그대로 상속해서 사
용 가능하다.
구현과 추상속성 처리
Trait 내부에 추상속성과 구현 속성이 있을 경우
class에서 상속하고 추상속성은 재정의 필요하지만
구현속성은 재정의 없이 사용이 가능하다
Trait에 구현된 속성 오버라이딩
Trait에 구현된 속성을 그대로 상속해서 자
식클래스에서 동일한 속성을 사용하고자 할
때는 override 키워드를 사용해서 재정의
Trait에 구현된 메소드 사용
Trait를 구현할 때 추상 속성과 구현 메소드가
존재한다. 상속을 받은 클래스에서 속성을 구
현하고 인스턴스를 생성한 후에 메소드를 호
출하면 인스턴스 내의 값을 호출해서 처리
Trait에 구현 속성만 재정의
Trait를 구현할 때 구현 속성과 메소드가 존재하지만
상속된 클래스 내에 구현속성을 오버라이딩한 후에
메소드를 호출하면 실제 값은 현재 위치한 brand
속성을 호출해서 처리된다. Trait 내의 속성이 호출
되지 않는다.
Trait에 구현 메소드만 재정의
Trait 내에 구현속성과 메소드가 존재하고
실제 구현 메소드만 재정의하면 trait내의
구현 속성을 가져와서 처리된다.
Trait에 구현 속성과 메소드 재정의
Trait 내에 구현속성과 메소드가 존재하지만 실
제 클래스에서 구현속성과 메소드를 전부 재
정의하면 클래스에 재정의한 것만 처리된다.
Trait를 상속해서 trait 만들기
trait도 trait에서 상속이 가능
scala는 trait를 상속해서 구현할 수 있도
록 구조화 했다.
추상 속성/메소드를 상속해서 구현한다.
추상 속성/메소드를 상속만 한다
Trait를 상속해서 구현하기 1
Trait를 추상 속성과 메소드를 상속하지만
실제 구현을 하지 않아서 클래스에서 구현
해서 사용
Trait를 상속해서 구현하기 2
Trait를 상속해서 Trait에 구현되어 클래스는
상속만 해서 사용한다.
Self type 사용하기
Self type 처리
자기 유형은 직접 확장보다 간접 확정을 하
는 선언을 위해 사용되는 구조이다.
자가 유형은 특성을 직접 확장하지는 않
더라도 특성을 다른 특성과 혼합해야 한
다고 선언하는 방법입니다.
실제 정의된 것을 명기 없이 가져오는
것이므로 혼란은 올 수 있지만 상속표시
없이 처리가 된다.
Self type 정의
하나의 trait을 정의하고 self type으로 지정
해서 그 내용을 가져온다. 이를 가지고 추가
적으로 확장도 가능하다.
Self type 처리
상속하지 않고 상속하는 클래스를 미리 지정
해서 그 내용을 사용한다고 처리하면 실제 클
래스에 동일한 이름을 검색해서 처리해준다.
상속해서 처리
상속해서 처리하면 필요한 것을 전부 구현
해야 하지만 self type으로 처리하면 자동으
로 처리되는 것을 볼 수 잇다.
클래스에 직접 사용하기
실제 클래스에서 직접 self type을 지정할
수 있다. 인스턴스 생성할 때 with 구문에
trait를 넣어서 처리가 되어야 한다.
trait 를 가지고 생성하기
Trait를 new로 생성 불가능
실제 구현되지 않고 trait로 생성할 경우 에
러가 발생한다.
Trait를 new로 생성 가능
구현 속성과 메소드를 가지고 있을 경우 이
를 생성해서 내부 메소드를 실행할 수 있다.
다중 trait 상속하기
trait를 사용하는 이유
scala도 단일 상속을 수용하고 다중상속은
trait를 이용해서 처리한다.
추상클래스는 단일 상속만 허용
Trait는 다중 상속을 허용
추상클래스와 Trait 상속할 때는 extends로 추상클래스를 정의
하고 trait는 with 구문으로 사용
With를 사용해서 다중 상속
여러 개의 trait가 존해하면 with 구문을 사
용해서 trait를 상속해서 처리할 수 있다.
Mixin 처리
Mixin 처리
구현된 메소드를 가진 trait를 이용해서 현
재 객체의 기능을 처리한다.
익명클래스 정의
익명 클래스 처리
추상클래스를 지정해서 새로운 익명클래스를 정의
할 때 실제 내부적으로는 warning이 발생한다.
익명 클래스 처리: 경고 없애기
Import scala.language.reflectiveCalls를 먼저 선언
하고 익명클래스를 만들면 실제 경고가 사라진다.
Trait로 처리하기
Trait에 아무것도 안하는 구현 메소드를 정의하고 이
를 상속한 trait를 만들어서 객체를 만들 때 활용해
서 사용할 수 있다.
객체를 만들었을 때
새로운 trait이 적용
되므로 동일한 log
를 호출한 것이 제
대로 실행된다
클래스를 확장한 trait 처리
- 특정 클래스 한정처리
클래스를 상속하고 trait 처리
Trait을 클래스의 메소드를 오버라이딩하고 이
클래스를 생성할 때 with 구문으로 재사용하면
실제 익명클래스가 만들어져 처리가 된다.
특정 클래스에서 trait 사용
앞 페이지에서 정의된 GetName trait를 사
용할 때 실제 동일한 클래스가 아니므로
super 처리가 안된다.
제너릭 내부 처리
추상타입 사용하기
Trait 지정할 때 타입 매개변수화해서 처리하고
실제 결과값을 줄 수 있는 함수를 전달해서 이
함수의 처리결과를 반환값으로 처리되도록 정
의한다.

More Related Content

What's hot

Scala nested function generic function
Scala nested function generic functionScala nested function generic function
Scala nested function generic functionYong Joon Moon
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class patternYong Joon Moon
 
C++ struct copy
C++ struct copyC++ struct copy
C++ struct copy송미 이
 
Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준HoJun Sung
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
파이썬 데이터 검색
파이썬 데이터 검색파이썬 데이터 검색
파이썬 데이터 검색Yong Joon Moon
 
Swift세미나(속성(properties), 메소드(method))
Swift세미나(속성(properties), 메소드(method))Swift세미나(속성(properties), 메소드(method))
Swift세미나(속성(properties), 메소드(method))경원 정
 
자바스터디 3 2
자바스터디 3 2자바스터디 3 2
자바스터디 3 2jangpd007
 
Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Park Jonggun
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Hyun Sung Yoon
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법Yong Joon Moon
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3현찬 양
 
[Swift] Closure
[Swift] Closure[Swift] Closure
[Swift] ClosureBill Kim
 
Swift3 : class and struct(+property+method)
Swift3 : class and struct(+property+method)Swift3 : class and struct(+property+method)
Swift3 : class and struct(+property+method)승욱 정
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Park Jonggun
 

What's hot (19)

Scala syntax function
Scala syntax functionScala syntax function
Scala syntax function
 
Scala nested function generic function
Scala nested function generic functionScala nested function generic function
Scala nested function generic function
 
Scala type args
Scala type argsScala type args
Scala type args
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class pattern
 
Scala match pattern
Scala match patternScala match pattern
Scala match pattern
 
C++ struct copy
C++ struct copyC++ struct copy
C++ struct copy
 
Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
파이썬 데이터 검색
파이썬 데이터 검색파이썬 데이터 검색
파이썬 데이터 검색
 
Swift세미나(속성(properties), 메소드(method))
Swift세미나(속성(properties), 메소드(method))Swift세미나(속성(properties), 메소드(method))
Swift세미나(속성(properties), 메소드(method))
 
자바스터디 3 2
자바스터디 3 2자바스터디 3 2
자바스터디 3 2
 
Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3
 
[Swift] Closure
[Swift] Closure[Swift] Closure
[Swift] Closure
 
Swift3 : class and struct(+property+method)
Swift3 : class and struct(+property+method)Swift3 : class and struct(+property+method)
Swift3 : class and struct(+property+method)
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 

Similar to Scala trait usage

Scala 트레이트
Scala   트레이트Scala   트레이트
Scala 트레이트창규 김
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것jaypi Ko
 
디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13Shin heemin
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1정환 임
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1정환 임
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디quxn6
 
C# 고급 문법 part 1
C# 고급 문법 part 1C# 고급 문법 part 1
C# 고급 문법 part 1준영 박
 
[IT기술칼럼#1]고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#1]고급자바스크립트  for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼#1]고급자바스크립트  for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#1]고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4성연 김
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기Yong Joon Moon
 

Similar to Scala trait usage (15)

Design patterns
Design patternsDesign patterns
Design patterns
 
Scala 트레이트
Scala   트레이트Scala   트레이트
Scala 트레이트
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것
 
디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13
 
상속과 구현
상속과 구현상속과 구현
상속과 구현
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
 
EC 789
EC 789EC 789
EC 789
 
C# 고급 문법 part 1
C# 고급 문법 part 1C# 고급 문법 part 1
C# 고급 문법 part 1
 
[IT기술칼럼#1]고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#1]고급자바스크립트  for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼#1]고급자바스크립트  for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#1]고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
 
(고급자바스크립트 강좌)자바스크립트 클래스?
(고급자바스크립트 강좌)자바스크립트 클래스?(고급자바스크립트 강좌)자바스크립트 클래스?
(고급자바스크립트 강좌)자바스크립트 클래스?
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기
 

More from Yong Joon Moon

파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기Yong Joon Moon
 
파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기Yong Joon Moon
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기Yong Joon Moon
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
파이썬 Xml 이해하기
파이썬 Xml 이해하기파이썬 Xml 이해하기
파이썬 Xml 이해하기Yong Joon Moon
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기Yong Joon Moon
 
파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기Yong Joon Moon
 
파이썬 Special method 이해하기
파이썬 Special method 이해하기파이썬 Special method 이해하기
파이썬 Special method 이해하기Yong Joon Moon
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기Yong Joon Moon
 
Python+numpy pandas 4편
Python+numpy pandas 4편Python+numpy pandas 4편
Python+numpy pandas 4편Yong Joon Moon
 
Python+numpy pandas 3편
Python+numpy pandas 3편Python+numpy pandas 3편
Python+numpy pandas 3편Yong Joon Moon
 
Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편Yong Joon Moon
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편Yong Joon Moon
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈Yong Joon Moon
 
소프트웨어와 인문학
소프트웨어와 인문학 소프트웨어와 인문학
소프트웨어와 인문학 Yong Joon Moon
 

More from Yong Joon Moon (16)

rust ownership
rust ownership rust ownership
rust ownership
 
파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기
 
파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
파이썬 Xml 이해하기
파이썬 Xml 이해하기파이썬 Xml 이해하기
파이썬 Xml 이해하기
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기
 
파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기
 
파이썬 Special method 이해하기
파이썬 Special method 이해하기파이썬 Special method 이해하기
파이썬 Special method 이해하기
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기
 
Python+numpy pandas 4편
Python+numpy pandas 4편Python+numpy pandas 4편
Python+numpy pandas 4편
 
Python+numpy pandas 3편
Python+numpy pandas 3편Python+numpy pandas 3편
Python+numpy pandas 3편
 
Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
소프트웨어와 인문학
소프트웨어와 인문학 소프트웨어와 인문학
소프트웨어와 인문학
 

Scala trait usage

  • 3. 자바 인터페이스 대용 Trait 내부에 함수 타입만 정의하면 추상 메소드로 인식하므로 클래스에서 이를 구현해야 함 속성 정의 메소드 정의
  • 4. 추상 속성 추상 속성을 정의하고 구현클래스에서 상속을 받아 구현을 해서 사용한다.
  • 5. 추상 메소드 대용 Trait 내부에 메소드 타입만 정의하면 추상 메소드로 인식하므로 클래스에서 이를 구현해야 함
  • 6. 제너릭 메소드: 추상 Trait 내부 메소드의 매개변수를 제너릭으로 처리할 경우 실제 구현에서 match를 이용해서 타입 체크
  • 7. 추상 과 구현 속성과 메소드 정의
  • 8. 자바 추상 클래스 대용 Trait 내부에 추상 및 구현 속성과 추상 및 구현 메소드를 혼용해서 사용 속성 정의 및 구현 메소드 정의 및 구현
  • 9. Trait에 구현된 속성 상속 Trait에 구현된 속성을 그대로 상속해서 사 용 가능하다.
  • 10. 구현과 추상속성 처리 Trait 내부에 추상속성과 구현 속성이 있을 경우 class에서 상속하고 추상속성은 재정의 필요하지만 구현속성은 재정의 없이 사용이 가능하다
  • 11. Trait에 구현된 속성 오버라이딩 Trait에 구현된 속성을 그대로 상속해서 자 식클래스에서 동일한 속성을 사용하고자 할 때는 override 키워드를 사용해서 재정의
  • 12. Trait에 구현된 메소드 사용 Trait를 구현할 때 추상 속성과 구현 메소드가 존재한다. 상속을 받은 클래스에서 속성을 구 현하고 인스턴스를 생성한 후에 메소드를 호 출하면 인스턴스 내의 값을 호출해서 처리
  • 13. Trait에 구현 속성만 재정의 Trait를 구현할 때 구현 속성과 메소드가 존재하지만 상속된 클래스 내에 구현속성을 오버라이딩한 후에 메소드를 호출하면 실제 값은 현재 위치한 brand 속성을 호출해서 처리된다. Trait 내의 속성이 호출 되지 않는다.
  • 14. Trait에 구현 메소드만 재정의 Trait 내에 구현속성과 메소드가 존재하고 실제 구현 메소드만 재정의하면 trait내의 구현 속성을 가져와서 처리된다.
  • 15. Trait에 구현 속성과 메소드 재정의 Trait 내에 구현속성과 메소드가 존재하지만 실 제 클래스에서 구현속성과 메소드를 전부 재 정의하면 클래스에 재정의한 것만 처리된다.
  • 17. trait도 trait에서 상속이 가능 scala는 trait를 상속해서 구현할 수 있도 록 구조화 했다. 추상 속성/메소드를 상속해서 구현한다. 추상 속성/메소드를 상속만 한다
  • 18. Trait를 상속해서 구현하기 1 Trait를 추상 속성과 메소드를 상속하지만 실제 구현을 하지 않아서 클래스에서 구현 해서 사용
  • 19. Trait를 상속해서 구현하기 2 Trait를 상속해서 Trait에 구현되어 클래스는 상속만 해서 사용한다.
  • 21. Self type 처리 자기 유형은 직접 확장보다 간접 확정을 하 는 선언을 위해 사용되는 구조이다. 자가 유형은 특성을 직접 확장하지는 않 더라도 특성을 다른 특성과 혼합해야 한 다고 선언하는 방법입니다. 실제 정의된 것을 명기 없이 가져오는 것이므로 혼란은 올 수 있지만 상속표시 없이 처리가 된다.
  • 22. Self type 정의 하나의 trait을 정의하고 self type으로 지정 해서 그 내용을 가져온다. 이를 가지고 추가 적으로 확장도 가능하다.
  • 23. Self type 처리 상속하지 않고 상속하는 클래스를 미리 지정 해서 그 내용을 사용한다고 처리하면 실제 클 래스에 동일한 이름을 검색해서 처리해준다.
  • 24. 상속해서 처리 상속해서 처리하면 필요한 것을 전부 구현 해야 하지만 self type으로 처리하면 자동으 로 처리되는 것을 볼 수 잇다.
  • 25. 클래스에 직접 사용하기 실제 클래스에서 직접 self type을 지정할 수 있다. 인스턴스 생성할 때 with 구문에 trait를 넣어서 처리가 되어야 한다.
  • 26. trait 를 가지고 생성하기
  • 27. Trait를 new로 생성 불가능 실제 구현되지 않고 trait로 생성할 경우 에 러가 발생한다.
  • 28. Trait를 new로 생성 가능 구현 속성과 메소드를 가지고 있을 경우 이 를 생성해서 내부 메소드를 실행할 수 있다.
  • 30. trait를 사용하는 이유 scala도 단일 상속을 수용하고 다중상속은 trait를 이용해서 처리한다. 추상클래스는 단일 상속만 허용 Trait는 다중 상속을 허용 추상클래스와 Trait 상속할 때는 extends로 추상클래스를 정의 하고 trait는 with 구문으로 사용
  • 31. With를 사용해서 다중 상속 여러 개의 trait가 존해하면 with 구문을 사 용해서 trait를 상속해서 처리할 수 있다.
  • 33. Mixin 처리 구현된 메소드를 가진 trait를 이용해서 현 재 객체의 기능을 처리한다.
  • 35. 익명 클래스 처리 추상클래스를 지정해서 새로운 익명클래스를 정의 할 때 실제 내부적으로는 warning이 발생한다.
  • 36. 익명 클래스 처리: 경고 없애기 Import scala.language.reflectiveCalls를 먼저 선언 하고 익명클래스를 만들면 실제 경고가 사라진다.
  • 37. Trait로 처리하기 Trait에 아무것도 안하는 구현 메소드를 정의하고 이 를 상속한 trait를 만들어서 객체를 만들 때 활용해 서 사용할 수 있다. 객체를 만들었을 때 새로운 trait이 적용 되므로 동일한 log 를 호출한 것이 제 대로 실행된다
  • 38. 클래스를 확장한 trait 처리 - 특정 클래스 한정처리
  • 39. 클래스를 상속하고 trait 처리 Trait을 클래스의 메소드를 오버라이딩하고 이 클래스를 생성할 때 with 구문으로 재사용하면 실제 익명클래스가 만들어져 처리가 된다.
  • 40. 특정 클래스에서 trait 사용 앞 페이지에서 정의된 GetName trait를 사 용할 때 실제 동일한 클래스가 아니므로 super 처리가 안된다.
  • 42. 추상타입 사용하기 Trait 지정할 때 타입 매개변수화해서 처리하고 실제 결과값을 줄 수 있는 함수를 전달해서 이 함수의 처리결과를 반환값으로 처리되도록 정 의한다.