본문 바로가기

Kotlin

[Kotlin] 1. 코틀린 기초

728x90
반응형

 

1. Hello, World! 찍기

fun main(args:Array<String>){
	println("Hello, World!")
    }

 -> 함수를 정의할 때 fun을 사용

 

 

 

 

2. 반환 값의 타입이 있는 경우 

fun main(a: Int, b:Int) : Int {
	return if (a >b) a else b
    }

- main -> 함수 이름

- (a: Int, b:Int) -> 파라미터 목록

- : Int -> 반환 타입

- return if (a>b) a else b -> 함수 본문

 

 

 

 

 

3. 코틀린에서 문(statement)과 식(expression)의 구분

 

 - 코틀린에서 if는 문이다. 

 - 식 : 값을 만들어 내며 다른 식의 하위 요소를 계산에 참여할 수 있음

 - 문 : 자신을 둘러싸고 있는 가장 안쪽 블록의 최상위 요소로 존재, 아무런 값을 만들어내지 않는다는 차이가 있음

 - 블록이 본문인 함수 : 본문이 중괄호로 둘러싸인 함수

 - 식이 본문인 함수 : 등호와 식으로 이뤄진 함수, 사용자가 반환 타입을 적지 않아도 컴파일러가 함수 본문 식을 분석해서 결과 타입을 함수 반환 타입으로 정해줌

 - 타입 추론(Type inference) : 컴파일러가 타입을 분석해 프로그래머 대신 프로그램 구성 요소의 타입을 정해주는 기능

 

 

 

 

 

4. 변수 val, var

 

- val : 변경 불가능한 변수, 재대입 불가능, 참조 자체는 불변이지만 그 참조가 가리키는 객체의 내부 값은 변경될 수 있음(읽기 전용 변수)

- var : 변경 가능한 변수

-> 기본적으로는 모든 변수를 val로 선언하고, 필요할 때 var로 변경

 

 

 

 

 

5. 문자열 템플릿

fun main(args:Array<String>){
	val name = if (args.size > 0) args[0] else "Kotlin"
   	println("Hello, $name!")
    }

- 문자열 리터럴안에서 name 변수를 사용. 필요한 곳에 변수를 넣되 변수 앞에 $를 추가해야 함

- $ 문자를 문자열에 넣고 싶으면 \(역슬래시)를 사용해야 함

- 복잡한 식도 중괄호({})로 문자열 템플릿 안에 넣을 수 있음 ex) ${args[0]}

- 문자열 템플릿을 사용하면 문자열을 연결하지 않아도 되므로 코드가 간결해짐

 

 

 

 

 

6. 값 객체 ( value object ) : 코드가 없이 데이터만 저장하는 클래스

 

ex)

class Person(val name: String)

-> 클래스를 간결하게 표현

 

 

 

 

 

7. 프로퍼티(Property)

 

- 클래스 : 데이터를 캡슐화(encapsulate)하고, 캡슐화한 데이터를 다루는 코드를 한 주체 아래 가두는 것

- 필드 : 데이터를 저장하는 장소

- 프로퍼티 : 필드와 접근자를 묶어 부름, 프로퍼티를 선언할 때 앞에 val or var를 사용

  (1) val : 읽기 전용 

  (2) var : 변경 가능

  (3) 프로퍼티의 값을 저장하기 위한 필드를 프로퍼티를 뒷받침하는 필드(backing field)라고 함

 

 

 

 

 

8. 코틀린 소스코드 구조

 

- 패키지(package) : 파일 안에 있는 모든 선언(클래스, 함수, 프로퍼티 등)이 해당 패키지에 들어간다

 ( 다른 패키지에 정의한 선언을 사용하려면 임포트를 통해 선언을 불러와야함 )

 

ex)

패키지 이름 뒤에 .*를 추가하면 패키지 안의 모든 선언을 임포트할 수 있다.

 

 

 

9. enum 클래스 정의

 

- 코틀린에서 enum은 소프트 키워드라 부르고, 클래스 안에 프로퍼티나 메소드를 정의할 수 있다.

enum class Color(
	val r:Int, val g:Int, val b:int
    ){
    	RED(255,0,0), ORANGE(255,165,0);
        fun rgb() = (r*256+g)*256+b
        }

  * val r:Int, val g:Int, val b:int : 상수의 프로퍼티 정의

  * RED(255,0,0), ORANGE(255,165,0); : 코틀린에서 유일하게 세미콜론이 필수인 부분, enum 상수 목록과 메소드 정의 사이에 세미콜른을 넣어야한다.

  * fun rgb() = (r*256+g)*256+b : enum 클래스 안에서 메소드를 정의한다

 

 

 

 

 

10. when 

 

- when 식의 인자로 임의의 객체를 허용함

- when 식은 인자 값과 매치하는 조건 값을 찾을 때까지 각 분기를 검사함

- 인자가 없는 when 식을 사용하면 불필요한 객체 생성을 막을 수 있음

 

 

 

 

 

11. 스마트 캐스트(smart cast)

 

- 스마트 캐스트 : 어떤 변수가 원하는 타입인지 일단 is로 검사 -> 캐스팅 하지 않아도 마치 처음부터 그 변수가 원하는 타입으로 선언된 것처럼 사용할 수 있는것 ( 실제로는 컴파일러가 캐스팅을 수행해줌 ) => 스마트 캐스트를 활용해 자동으로 타입을 바꿔줌

- 원하는 타입으로 명시적으로 타입 캐스팅을 하려면 as 를 사용한다.

 

 

 

 

 

12. if와 when

- if와 when 모두 분기에 블록을 사용할 수 있다. 그럴 경우 마지막 문장이 블록 전체의 결과가 된다.

- if는 코틀린에서 식이며, 값음 나들어낸다

 

 

 

13. 이터레이션(iteration)

 - Iterator은 모든 요소들의 컬렉션을 하나씩 처리할때 유용하게 사용한다.

 

 - 수열(progerssion) : 어떤 범위에 속한 값을 일정한 순서대로 이터레이션 하는 경우

 - until 함수를 사용하여 반만 닫힌 범위(반폐구간)에 대해 이터레이션

 

 

 

 

14. in

 

- in : 연산자를 사용해 어떤 값이 범위에 속하는지 검사할 수 있음

- !in : 어떤 값이 범위에 속하지 않는지 검사할 수 있음

 

 

15. 예외처리

 

- try, catch, finally 절을 사용

- try : try의 값을 변수에 대입할 수 있음, 본문을 중괄호{}로 둘러싸야 함, 여러문장이 있을 경우 마지막 식의 값이 전체 결과 값

- catch: try에서 예외가 발생하고 잡히면 그 예외에 해당하는catch 블록의 값이 결과임

 

 

 

 

 

 

 

 

 

 

 

 

 


참고

https://kotlinlang.org/docs/iterators.html

 

Iterators | Kotlin

 

kotlinlang.org

 

 

참고

kotlin in Action 2장

728x90
반응형