SlideShare a Scribd company logo
Scala 내부 함수
및 제너릭 함수 처리
myjlms99@gmail.com
블록 처리 이해하기
블록 내에 함수를 정의해서 처리
파이썬 함수는 실제 블록 처리되는 하나의
변수로 처리되므로 실제 변수에 블록을 작
성해서 전달해도 람다함수 처럼 처리가 되
는 것을 알 수 있다.
매개변수가 없는 함수
는 함수 이름으로 바
로 실행
호출이 필요한 경우
함수와 인자를 결과로
주면 함수값이 세팅된
다
모듈에 정의된 함수 호출
전역과 지역 네임스페이스
모듈은 그 내부에 있는 모든 함수나 클래스
에 대한 정보 및 다양한 변수들을 관리한다.
함수에 없는 변수나 함수에 대해서는 모듈
에 있는 것을 참조해서 처리가 가능하다
모듈 전역 네임스페이스
함수 지역 네임스페이스
참조
모듈에 정의된 함수 사용
모듈에 정의된 함수도 다른 함수 내부에서
접근이 가능해서 처리할 수 있다.
모듈에 정의된 함수를 외부로 전달
모듈에 정의된 함수도 다른 함수 내부에서
외부로 전달하는 함수로도 사용이 가능하다.
Nested function
내부 함수 정의 방법
함수정의하고 그 내부에 내부함수를 정의할
수 있다. 동일한 함수명으로 정의해도 실제
자신의 함수가 아닌 것을 알 수 있다.
def 함수명[타입매개변수](매개변수) : 반환값 = {
def 내부함수명(매개변수) : 반환값 = {로직}
}
내부 함수 정의 및 실행
외부 함수를 정의할 때 내부 함수를 정의하
고 외부 함수 매개변수를 내부함수에 전달
해서 실행하도록 처리하면 내부함수 결과값
이 외부로 전달된다.
내부 함수 정의
함수 내부에 함수를 정의해서 실행도 가능하다. 동
일한 이름으로 정의해도 함수 타입을 체크할 때 매
개변수 개수에 따라 다르게 인식되어 처리된다. 동
일한 이름으로 작성해도 처리가 된다.
내부 함수를 람다함수 사용
내부 함수로 람다함수 사용
내부에 람다함수를 정의하고 이를 실행해서
처리한다.
내부 함수를 결과값으로 전달
내부 함수 정의 후 전달: 함수 1
함수 내부에 함수를 정의하면 실제 내부함
수가 외부로 전달도 가능하다. 함수 이름과
_를 붙여 매개변수도 전달해야 한다
내부 함수 정의 후 전달: 함수 2
리턴 타입까지 명확히 정의가 된 경우는 내
부 함수의 이름만 전달해도 실제 함수 타입
이므로 처리가 된다.
내부 함수 정의 후 전달: 람다함수
내부 함수에 람다를 지정해서 표현식 결과값
으로 전달할 수 있다. 다시 실행하면 내부 함수
인 람다함수가 처리되는 것을 알 수 있다.
내부함수에서 모듈/외부함수
변수 참조
내부함수에서 모듈 변수 참조
함수 내부에 없는 변수가 있으면 외부 함
수를 검색하고 없으면 모듈을 검색해서 처
리한다.
함수 타입 매개변수에
대한 확정
타입 매개화
특정 객체가 만들어질 때 이 객체가 속한 클래
스 타입을 지정하는 것이다. 함수 매개변수나
클래스의 매개변수 등에 사용할 수 있다.
매개변수화한 타입은 List[String] = List("a", "b")와 같이 [] 안에
타입을 지정해준다.
타입 매개변수 정의 방법
함수명 다음에 대괄호와 타입을 지정할 수
있고 이 타입을 매개변수에 지정하면 실제
추론은 함수 호출할 때 결정된다.
def 함수명[타입매개변수](매개변수) : 반환값 = {
실제 로직
}
타입 추론 기준
타입 매개변수를 사용할 경우 타입추론은 실
제 함수가 호출될 때 결정되며 실제 반환값도
각 처리결과에 따라 결정되는 것을 알 수 있다.
타입 처리 기준
타입 매개변수는 다형성을 지원하지만 실제 타입이
확정되지 못하면 인식하지 못하므로 타입 매개변수
지정할 때 실제 처리될 수 있는 타입으로 한정해줘
야 한다.
함수 타입 매개변수
(제너릭 처리)
제너릭 함수: 단일 인자
다양한 자료형을 처리할 수 있도록 타입 매개
변수를 지정해서 처리가 가능하다. 호출시에
실제 매핑되는 타입을 지정해서 처리한다.
제너릭 함수: 두개 인자
다양한 자료형을 처리할 수 있도록 타입 매개
변수를 지정해서 처리가 가능하다. 호출시에
실제 매핑되는 타입을 지정해서 처리한다.
제너릭 함수 : 함수 전달 처리
제너릭 함수를 만들기 위해서는 매개변수에
대한 타입을 별도로 매개화하고 실제 별도
로 계산하는 함수를 전달해서 처리한다
두개 타입을 받고 연산 처리
두개의 타입을 받아 연산을 처리하면 에러가
발생하므로 하나의 함수를 더 받아서 처리하
면 두개의 타입 매개변수도 처리가 가능
외부 함수 제너릭 타입 활용
일반 함수에서 모듈 변수 참조
외부 함수에서 타입
특정 타입을 지정 처리
공변성, 반공변성, 무공변성
공변성은 자식 타입으로 치환이 가능하고
반공변성은 부모 타입으로 치환이 가능하다.
무공변성은 지정된 타입으로만 처리된다.
상속에 따른 변성
타입시스템을 이해 하기 위해선 상속에 다른 변성(variance)을 이해
해야 한다.
공변성 처리 예시
공변성은 자식 타입으로 치환이 가능하면
처리가 된다. 현재 결과값도 기본으로 공변
성으로 구성된 것을 알 수 있다.
상위경계와 하위경계
상위경계과 하위경계는 정해진 경계를 중
심으로 상위 타입과 하위 타입을 처리한다.
상위경계 [ T <: A] 로 표시 해당 A 타입과 그 하위 타입들을 포함해
서 처리
하위경계 [ T >: A] 로 표시 해당 A 타입과 그 상위 타입들을 포함해
서 처리
타입 매개변수를 특정화하기
제너릭 타입을 처리하기 보다 특정 타입을
지정해서 지정 범위 내에서 처리하기 위해
지정할 수 있다.
상위경계: upper bound
<: 를 이용해서 상위 클래스 경계를 부여
하면 하위 클래스에 대한 것을 처리가 가능
하다.
하위경계: upper bound
>: 를 이용해서 하위 클래스 경계를 부여하
면 상위 클래스에 대한 것을 처리가 가능하다.
일단 AnyVal로 지정하고 Long 자료형을 넣어
서 처리할 수 있다.
하위경계: upper bound
>: 를 이용해서 하위 클래스 경계를 부여하
면 상위 클래스에 대한 것을 처리가 가능하다.
일단 String으로 처리해도 해당 타입도 처리가
된다.

More Related Content

What's hot

Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritance
Yong Joon Moon
 
Scala companion object
Scala companion objectScala companion object
Scala companion object
Yong Joon Moon
 
Scala trait usage
Scala trait usageScala trait usage
Scala trait usage
Yong Joon Moon
 
Scala dir processing
Scala dir processingScala dir processing
Scala dir processing
Yong Joon Moon
 
C++ struct copy
C++ struct copyC++ struct copy
C++ struct copy
송미 이
 
Scala match pattern
Scala match patternScala match pattern
Scala match pattern
Yong Joon Moon
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
Park Jonggun
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
JavaScript Fundermetal
JavaScript FundermetalJavaScript Fundermetal
JavaScript Fundermetal
Kwangho SEO
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
quxn6
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
Park Jonggun
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
Yong Joon Moon
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
생코자바스크립트스터디3장
생코자바스크립트스터디3장생코자바스크립트스터디3장
생코자바스크립트스터디3장
Jinhwa Hong
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩해강
 
파이썬 데이터 검색
파이썬 데이터 검색파이썬 데이터 검색
파이썬 데이터 검색
Yong Joon Moon
 
비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6
민태 김
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법
Yong Joon Moon
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기
Yong Joon Moon
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
MIN SEOK KOO
 

What's hot (20)

Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritance
 
Scala companion object
Scala companion objectScala companion object
Scala companion object
 
Scala trait usage
Scala trait usageScala trait usage
Scala trait usage
 
Scala dir processing
Scala dir processingScala dir processing
Scala dir processing
 
C++ struct copy
C++ struct copyC++ struct copy
C++ struct copy
 
Scala match pattern
Scala match patternScala match pattern
Scala match pattern
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
JavaScript Fundermetal
JavaScript FundermetalJavaScript Fundermetal
JavaScript Fundermetal
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
생코자바스크립트스터디3장
생코자바스크립트스터디3장생코자바스크립트스터디3장
생코자바스크립트스터디3장
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
 
파이썬 데이터 검색
파이썬 데이터 검색파이썬 데이터 검색
파이썬 데이터 검색
 
비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
 

Similar to Scala nested function generic function

파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
Yong Joon Moon
 
파이썬 기초
파이썬 기초 파이썬 기초
파이썬 기초
Yong Joon Moon
 
Scala 기초 (3)
Scala 기초 (3)Scala 기초 (3)
Scala 기초 (3)
명성 정
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815
Yong Joon Moon
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
Yong Joon Moon
 
[SwiftStudy 2016] 3장. 함수
[SwiftStudy 2016] 3장. 함수[SwiftStudy 2016] 3장. 함수
[SwiftStudy 2016] 3장. 함수
Keunhyun Oh
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Function
wonmin lee
 
자바 8 학습
자바 8 학습자바 8 학습
자바 8 학습
HeeChang Lee
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기
Yong Joon Moon
 
[2011 04 30]python-3장
[2011 04 30]python-3장[2011 04 30]python-3장
[2011 04 30]python-3장Jong Pil Won
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
성연 김
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
유리 하
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
Min-soo Park
 
파이썬 둘째날
파이썬 둘째날파이썬 둘째날
파이썬 둘째날
명준 김
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
Yong Joon Moon
 
Std bind
Std bindStd bind
Std bind
문익 장
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
quxn6
 
Haskell study 6
Haskell study 6Haskell study 6
Haskell study 6
Nam Hyeonuk
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 

Similar to Scala nested function generic function (20)

파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
파이썬 기초
파이썬 기초 파이썬 기초
파이썬 기초
 
Scala 기초 (3)
Scala 기초 (3)Scala 기초 (3)
Scala 기초 (3)
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
 
[SwiftStudy 2016] 3장. 함수
[SwiftStudy 2016] 3장. 함수[SwiftStudy 2016] 3장. 함수
[SwiftStudy 2016] 3장. 함수
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Function
 
자바 8 학습
자바 8 학습자바 8 학습
자바 8 학습
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기
 
[2011 04 30]python-3장
[2011 04 30]python-3장[2011 04 30]python-3장
[2011 04 30]python-3장
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
 
파이썬 둘째날
파이썬 둘째날파이썬 둘째날
파이썬 둘째날
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
 
Std bind
Std bindStd bind
Std bind
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
 
Haskell study 6
Haskell study 6Haskell study 6
Haskell study 6
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 

More from Yong Joon Moon

rust ownership
rust ownership rust ownership
rust ownership
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 nested function generic function

  • 1. Scala 내부 함수 및 제너릭 함수 처리 myjlms99@gmail.com
  • 3. 블록 내에 함수를 정의해서 처리 파이썬 함수는 실제 블록 처리되는 하나의 변수로 처리되므로 실제 변수에 블록을 작 성해서 전달해도 람다함수 처럼 처리가 되 는 것을 알 수 있다. 매개변수가 없는 함수 는 함수 이름으로 바 로 실행 호출이 필요한 경우 함수와 인자를 결과로 주면 함수값이 세팅된 다
  • 5. 전역과 지역 네임스페이스 모듈은 그 내부에 있는 모든 함수나 클래스 에 대한 정보 및 다양한 변수들을 관리한다. 함수에 없는 변수나 함수에 대해서는 모듈 에 있는 것을 참조해서 처리가 가능하다 모듈 전역 네임스페이스 함수 지역 네임스페이스 참조
  • 6. 모듈에 정의된 함수 사용 모듈에 정의된 함수도 다른 함수 내부에서 접근이 가능해서 처리할 수 있다.
  • 7. 모듈에 정의된 함수를 외부로 전달 모듈에 정의된 함수도 다른 함수 내부에서 외부로 전달하는 함수로도 사용이 가능하다.
  • 9. 내부 함수 정의 방법 함수정의하고 그 내부에 내부함수를 정의할 수 있다. 동일한 함수명으로 정의해도 실제 자신의 함수가 아닌 것을 알 수 있다. def 함수명[타입매개변수](매개변수) : 반환값 = { def 내부함수명(매개변수) : 반환값 = {로직} }
  • 10. 내부 함수 정의 및 실행 외부 함수를 정의할 때 내부 함수를 정의하 고 외부 함수 매개변수를 내부함수에 전달 해서 실행하도록 처리하면 내부함수 결과값 이 외부로 전달된다.
  • 11. 내부 함수 정의 함수 내부에 함수를 정의해서 실행도 가능하다. 동 일한 이름으로 정의해도 함수 타입을 체크할 때 매 개변수 개수에 따라 다르게 인식되어 처리된다. 동 일한 이름으로 작성해도 처리가 된다.
  • 13. 내부 함수로 람다함수 사용 내부에 람다함수를 정의하고 이를 실행해서 처리한다.
  • 15. 내부 함수 정의 후 전달: 함수 1 함수 내부에 함수를 정의하면 실제 내부함 수가 외부로 전달도 가능하다. 함수 이름과 _를 붙여 매개변수도 전달해야 한다
  • 16. 내부 함수 정의 후 전달: 함수 2 리턴 타입까지 명확히 정의가 된 경우는 내 부 함수의 이름만 전달해도 실제 함수 타입 이므로 처리가 된다.
  • 17. 내부 함수 정의 후 전달: 람다함수 내부 함수에 람다를 지정해서 표현식 결과값 으로 전달할 수 있다. 다시 실행하면 내부 함수 인 람다함수가 처리되는 것을 알 수 있다.
  • 19. 내부함수에서 모듈 변수 참조 함수 내부에 없는 변수가 있으면 외부 함 수를 검색하고 없으면 모듈을 검색해서 처 리한다.
  • 21. 타입 매개화 특정 객체가 만들어질 때 이 객체가 속한 클래 스 타입을 지정하는 것이다. 함수 매개변수나 클래스의 매개변수 등에 사용할 수 있다. 매개변수화한 타입은 List[String] = List("a", "b")와 같이 [] 안에 타입을 지정해준다.
  • 22. 타입 매개변수 정의 방법 함수명 다음에 대괄호와 타입을 지정할 수 있고 이 타입을 매개변수에 지정하면 실제 추론은 함수 호출할 때 결정된다. def 함수명[타입매개변수](매개변수) : 반환값 = { 실제 로직 }
  • 23. 타입 추론 기준 타입 매개변수를 사용할 경우 타입추론은 실 제 함수가 호출될 때 결정되며 실제 반환값도 각 처리결과에 따라 결정되는 것을 알 수 있다.
  • 24. 타입 처리 기준 타입 매개변수는 다형성을 지원하지만 실제 타입이 확정되지 못하면 인식하지 못하므로 타입 매개변수 지정할 때 실제 처리될 수 있는 타입으로 한정해줘 야 한다.
  • 26. 제너릭 함수: 단일 인자 다양한 자료형을 처리할 수 있도록 타입 매개 변수를 지정해서 처리가 가능하다. 호출시에 실제 매핑되는 타입을 지정해서 처리한다.
  • 27. 제너릭 함수: 두개 인자 다양한 자료형을 처리할 수 있도록 타입 매개 변수를 지정해서 처리가 가능하다. 호출시에 실제 매핑되는 타입을 지정해서 처리한다.
  • 28. 제너릭 함수 : 함수 전달 처리 제너릭 함수를 만들기 위해서는 매개변수에 대한 타입을 별도로 매개화하고 실제 별도 로 계산하는 함수를 전달해서 처리한다
  • 29. 두개 타입을 받고 연산 처리 두개의 타입을 받아 연산을 처리하면 에러가 발생하므로 하나의 함수를 더 받아서 처리하 면 두개의 타입 매개변수도 처리가 가능
  • 30. 외부 함수 제너릭 타입 활용
  • 31. 일반 함수에서 모듈 변수 참조 외부 함수에서 타입
  • 33. 공변성, 반공변성, 무공변성 공변성은 자식 타입으로 치환이 가능하고 반공변성은 부모 타입으로 치환이 가능하다. 무공변성은 지정된 타입으로만 처리된다. 상속에 따른 변성 타입시스템을 이해 하기 위해선 상속에 다른 변성(variance)을 이해 해야 한다.
  • 34. 공변성 처리 예시 공변성은 자식 타입으로 치환이 가능하면 처리가 된다. 현재 결과값도 기본으로 공변 성으로 구성된 것을 알 수 있다.
  • 35. 상위경계와 하위경계 상위경계과 하위경계는 정해진 경계를 중 심으로 상위 타입과 하위 타입을 처리한다. 상위경계 [ T <: A] 로 표시 해당 A 타입과 그 하위 타입들을 포함해 서 처리 하위경계 [ T >: A] 로 표시 해당 A 타입과 그 상위 타입들을 포함해 서 처리
  • 36. 타입 매개변수를 특정화하기 제너릭 타입을 처리하기 보다 특정 타입을 지정해서 지정 범위 내에서 처리하기 위해 지정할 수 있다.
  • 37. 상위경계: upper bound <: 를 이용해서 상위 클래스 경계를 부여 하면 하위 클래스에 대한 것을 처리가 가능 하다.
  • 38. 하위경계: upper bound >: 를 이용해서 하위 클래스 경계를 부여하 면 상위 클래스에 대한 것을 처리가 가능하다. 일단 AnyVal로 지정하고 Long 자료형을 넣어 서 처리할 수 있다.
  • 39. 하위경계: upper bound >: 를 이용해서 하위 클래스 경계를 부여하 면 상위 클래스에 대한 것을 처리가 가능하다. 일단 String으로 처리해도 해당 타입도 처리가 된다.