관리 메뉴

HAMA 블로그

스칼라 강좌 (2) - Array 본문

Scala

스칼라 강좌 (2) - Array

[하마] 이승현 (wowlsh93@gmail.com) 2016. 6. 13. 20:29

이 시리즈는 스칼라언어의 창시자인 마틴 오더스키가 직접 저술한   Programming in Scala (2판)   
을 참고로 하여 정리할 예정입니다.  잘못된 점이 있으면 지적해주시면 바로 수정하겠습니다

 


Array

 
생성 

스칼라에서 객체로 만들때는 new 를 사용합니다. 다음과 같죠
val a = new  Array[String](2)  // String 타입이 2개 담길수 있는 배열의 객체를 만들었네요.
자 배열에 값은 어떻게 넣을까요? 
a(0) = "hello"
a(1) = "world"

요렇게 넣으면 됩니다.  

여기서 눈여겨 볼것은 일단 val 로 선언했는데 값을 바꾼겁니다. 이건 전에 얘기했다시피 변수를 재 할당 할 수 없는거지, 변수가 가르키는 객체 안의 내용은 여전히 변경가능하다는거죠. 

- 자바에서는 String a[] = new String[2] 이렇게 만듭니다. 
- 코틀린에서는 
var array1 : Array<String?> = emptyArray()
var array2: Array<String?> = arrayOfNulls(4)
var array3 = arrayOf<String>("Mashroom", "Kitkat", "Oreo", "Lolipop")
var array4 = Array(2, {""}))

자 그럼 값을 출력해볼까요?

 

값 가져오기

print(a(0)) 

이렇게 하면 값을 꺼내와서 출력에 사용합니다.

() 를 통해서 접근했는데요. 어떻게 가능 할까요??

스칼라에서는 변수 뒤에 하나 이상의 값을 괄호로 둘러싸서 호출하면 

그 변수의 apply() 메소드를 호출하는것으로 바꾸어줍니다.

즉 a.apply(0) 이렇게 변경된다는거죠. 

a(0) 는 a.apply(0) 입니다. 배열객체에서 apply 는 해당 인덱스에 해당하는 값을 꺼내오는 겁니다.

이런 apply 는 배열객체에만 있는건 아닙니다. 

 

값 넣기  

그럼 값을 짚어넣는건 어떻게 된걸까요?

a(0) = "hello"

이거 말입니다.  이것도 역시 생략된것인데요.

괄호로 둘러싼 인자들이 있는 표현식에 할당이 되면 컴파일러는 

a.update(0, 'hello') 이렇게 바꾸어줍니다.  

즉 값을 가져오거나 넣을때 사용하는 () 는 좀 편하게 쓰라고 스칼라 창시자가 만든 장치입니다.

실상은 메소드 호출이란 야그죠. 

 

배열을 만드는 더 간편한 방법 

val a = Array("hello", "world") 

이렇게 만들 수 있습니다.

new 도 생략되었고 [String] 도 생략되었습니다.

[String]  생략

초기화할때 인자로 String 이 들어가기때문에 타입을 추론한겁니다.

new  생략

암시적으로 apply 라는 이름의 팩토리 메소드를 호출해서 객체를 만들어줍니다.

Array.apply("hello", "world") 원랜 이런거란거죠.

스칼라 창시자는 참 별걸 다 신경써서 만들어 주네요.

 

 

마침.

위에서 보면 값을 할당하고 그러잖아요? 네 Array 는 변경가능합니다. 변경 불가능 한것도 있다고 하네요. 

스칼라 언어는 변수의 값을 변경 할 수 있냐? 없냐를 매우 중요하게 생각하는거 같습니다.

'Scala' 카테고리의 다른 글

스칼라 강좌 (6) - Map  (0) 2016.06.20
스칼라 강좌 (5) - Set  (0) 2016.06.19
스칼라 강좌 (4) - Tuple  (0) 2016.06.19
스칼라 강좌 (3) - List  (0) 2016.06.15
스칼라 강좌 (1 ) - 소개  (0) 2016.06.13
Comments