티스토리 툴바


Scala 언어에서 각종 라이브러리마다 공통되는 함수가 존재하는데, apply 라는 녀석이다.

apply 라는 녀석은 말 그대로 어떤 함수를 적용시킨다는 의미인데, 자세히 이야기 하면, apply 와 함께 들어오는 인자에 대해서는 어떤 함수를 적용시킨다는 뜻이다.




f1은 x와 y 두 정수를 받아서 합쳐서 그 값을 돌려주는 함수이다.


f1.apply(2,3)을 하게 되면 이 f1이라고 정의된 함수에 2, 3이라는 인자를 적용해서 함수의 역할을 하라는 뜻이다. 여기서 신기한 것은 우리는 자연스럽게 f1(2,3)이라고 호출하고 싶다. 왜냐하면, f1.apply(2,3)은 좀 자연스럽지 않기 때문이다. 여기서 f1은 함수이지만 스칼라 언어에서 역시 객체로 인식된다.

그렇기 때문에 객체지향 언어에서는 당연히 object, method 형식으로 메소드가 호출 되어야 하는 것이 당연하다. 하지만 스칼라에서는 이 객체지향 언어와 함수형 언어의 gap을 줄이기 위해 왠만한 object클래스에 apply함수가 구현되어 있다.



스칼라 언어에서의 apply함수는 객체와 함수의 격차를 줄여주는 편리한 기능이라고 볼 수 있다.



출처 : http://starblood.tistory.com/151

저작자 표시
Posted by 우혁이 아빠

첫 번째 예제
object 선언은 싱글턴 객체를 생성하는데, 이는 하나의 인스턴스만을 가지는 클래스라 할 수 있다. 
예제에서 main 함수는 static이 아니다. Scala에는 정적멤버(함수든 필드든)라는 개념이 아얘 존재하지 않는다. 클래스의 일부로 정적 멤버를 정의하는 대신에 Scala 프로그래머들은 정적이기 원하는 멤버들을 싱글턴 객체 안에 선언한다.



자바와 함께 사용하기

첫번째 줄과 같이 중괄호를 사용하면 같은 패키지에서 여러개의 클래스를 선택적으로 불러 올 수 있다.
Scala 임포트 구문의 또 한가지 특징은 패키지나 클래스에 속한 모든 이름들을 불러 올 경우 별표(*)대신 밑줄(_)을 사용한다는 것이다. 별표는 Scala에서 합법적인 식별자(함수명 등에 사용 가능한)로 사용된다.
따라서 세번째 줄의 임포트 구문은 DateFormat 클래스의 모든 멤버를 불러온다. 이렇게 함으로써 정적 함수 getDateInstance와 정적 필드 LONG이 바로 사용 가능하게 된다.

마지막 줄은 Scala 문법의 재미있는 특성을 보여준다. 오직 하나의 인자를 갖는 함수는 마치 이항연산자 같은 문법으로 호출이 가능하다. 
df format now == df.format(now)

모든 것은 객체다

함수마저 객체다
1. 함수에 함수를 인자로 넘기거나, 
2. 함수를 변수에 저장하거나, 
3. 함수가 함수를 리턴하는 것도 가능하다. 
이처럼 함수를 값과 동일하게 다루는 것은 매우 흥미로운 프로그래밍 패러다임인 함수형 프로그래밍의 핵심요소 중 하나이다.

아래 프로그램에서 타이머 함수의 이름은 oncePerSecond이다. 이 함수는 콜백 함수를 인자로 받는다. 인자로 받는 함수의 타입은 () => Unit 인데, 이 타입은 인자를 받지 않고 아무것도 돌려주지 않는 모든 함수를 뜻한다(Unit 타입은 C/C++에서 void와 비슷하다). 


이름없는 함수

이 프로그램은 이해하기 쉽지만 조금 더 다듬을 수도 있다. 함수 timeFiles는 오직 함수 oncePerSecond에 인자로 넘겨지기 위해 정의 되었다는 것에 주목하자. 이러한 한번만 사용되는 함수에 이름을 붙여 준다는 것은 필요 없는 일일 수 있다. 더 행복한 방법은 oncePerSecond에 함수가 전달되는 그 순간 이 함수를 생성하는 것이다. Scala에서 제공하는 무명함수를 사용하면 된다. 



main 함수 안에 오른쪽 화살표 => 가 있는 곳이 무명함수이다. 오른쪽 화살표는 함수의 인자와 함수의 내용을 분리 해주는 역할을 한다.



클래스에 대하여

Scala의 클래스 정의는 Java의 클래스 정의와 유사하다. 한가지 중요한 차이점은 Scala클래스의 경우 파라미터들을 가질 수 있다는 것인데 아래 복소수 예제에 잘 나타나 있다.



이 복소수 클래스는 두개의 인자를 받는다. 하나는 복소수의 실수 부분이고 다른 하나는 복소수의 허수 부분에 해당하든 값이 된다. 이 인자들은 Complex 클래스의 인스턴스를 생성할 때 이처럼 반드시 전달 되어야 한다. new Complex(1.2, 2.3) 클래스는 re와 im라는 두 함수를 가지고 있는데 각각의 함수를 통해 복소수를 구성하는 해당 부분의 값을 얻을 수 있다.

이 두 함수의 리턴타입은 명시적으로 나타나 있지 않다는 사실에 주목하자. 컴파일러는 이 함수들의 오른편을 보고 둘 다 Double 타입을 리턴 한다고 자동으로 유추해 낸다.

하지만 컴파일러가 언제나 이렇게 타입을 유추해 낼 수 있는 것은 아니다. 그리고 불행하게도 어떤 경우 이러한 타입 유추가 가능하고 어떤 경우 불가능 한지에 관한 명확한 규칙도 존재하지 않는다. 일반적으로 이러한 상황은 별 문제가 되지 않는다.

 

인자없는 함수

함수 re와 im의 사소한 문제는 그들을 호출하기 위해 항상 뒤에 빈 괄호를 붙여 주어야 한다는 것이다.



실수 부분과 허수 부분에 접근 할 때에 마치 그들이 필드인 것 처럼 함수 마지막에 빈 괄호를 붙이지 않을 수 있다. 그저 인자를 제외하고 함수를 정의하면 된다. 이런 종류의 함수는 인자가 0개인 함수와는 다른데, 인자가 0개인 함수는 빈 괄호가 따라 붙는 반면 이 함수는 정의 할 때도 이름 뒤에 괄호를 붙이지 않는다. 




상속과 재정의

모든 Scala의 클래스들은 항상 상위 클래스로부터 상속된다. 만약 Complex 예제처럼 상위 클래스가 존재하지 않을 경우는 묵시적으로 scala.AnyRef를 상속한다.

Scala에서는 물론 상위 클래스에 정의된 함수를 오버라이드 하는 것도 가능하다. 그러나 의도하지 않는 실수를 방지하기 위하여 다른 함수를 오버라이드 하는 함수는 override 지시자를 꼭 적어주어야 한다. 











출처 - http://ddoong2.com/771 

자바 프로그래머를 위한 스칼라 튜토리얼


저작자 표시
Posted by 우혁이 아빠

함수적 프로그래밍의 장점


공부해야할 것이 너무 많아 .T.T

저작자 표시
Posted by 우혁이 아빠
이제는 클라이밍 도전!!!
입문


준비용품





















저작자 표시

'스포츠클라이밍' 카테고리의 다른 글

스포츠 클라이밍 입문(동영상)  (0) 2013/05/02
Posted by 우혁이 아빠

How to climbing

기타 2013/04/22 17:41

암벽화

저작자 표시

'기타' 카테고리의 다른 글

How to climbing  (0) 2013/04/22
프렌즈 대본  (0) 2012/08/28
HTML 줄마춤  (0) 2012/03/28
쥐새끼...  (1) 2011/12/22
당신을 잊지 않겠어요. 대통령이 될때까지...  (0) 2011/12/22
이날을 잊지않는다. 썩은 나라를 ...  (0) 2011/12/22
Posted by 우혁이 아빠
저작자 표시
Posted by 우혁이 아빠

이 글의 출처는 워드프레스 통달하기(PC BOOk)입니다. 문제가 되면 연락주세요. 바로 삭제합니다.^^


초기 세팅이 끝난뒤  http://127.0.0.1/ 입력해서 들어가보면 이렇게 뜬다. 난 이 화면을 원하지 않는다. 블로그로 바로 들어가도록 만들어 보자.



1. 설정 > 일반 > 사이트 주소(URL)을 수정하자.


수정 전)

수정 후)


2. htdocs 폴더의 index.php를 백업하고,

수정 전)

수정 후)


3. htdocs/wordpress 폴더의 index.php를 htdocs 폴더로 복사한다.


4. htdocs 폴더의 index.php를 수정한다.

수정 전)

수정 후)


짠!!! 된다.



좋은 책은 사서들 보셈!!!

저작자 표시

'wordpress' 카테고리의 다른 글

집주소를 짧게 해보자.  (0) 2013/03/24
Posted by 우혁이 아빠
1. pom.xml
repositories 에 추가


dependencies 에 추가


2. applicationContext.xml 수정
repositories 에 추가


3. log4j.xml 추가 (log4j.properties 위치에)



web.xml 수정



저작자 표시

'Java' 카테고리의 다른 글

log4jdbc 사용하여 로그찍기  (0) 2013/03/20
VO와 DTO의 차이  (0) 2012/10/24
log4jdbc를 활용하여 쿼리 로그 남기기  (0) 2012/10/05
프로그래밍 안티 패턴  (0) 2012/08/20
Java Clone()  (0) 2012/07/20
Java reflection Test  (0) 2012/07/17
Posted by 우혁이 아빠

SQL문 자동 정렬

SQL 2013/03/19 09:03

여기 완존 좋네요!!!


SQL문 자동 정렬 사이트



저작자 표시

'SQL' 카테고리의 다른 글

SQL문 자동 정렬  (0) 2013/03/19
엑셀로 DataBase insert 구문 만들때  (0) 2013/03/09
알아두면 쓸모있는 쿼리  (0) 2012/03/28
오라클 세로출력열을 가로 출력으로 하기  (0) 2011/12/06
관리자 계정으로 oracle 붙기  (0) 2011/07/18
html 줄바꿈 처리  (0) 2011/04/05
Posted by 우혁이 아빠

라즈베리 파이에 대하여

저작자 표시

'Raspberry Pi' 카테고리의 다른 글

장난감이 생길듯 하다.  (0) 2013/03/18
Posted by 우혁이 아빠