본문 바로가기

스터디/다재다능 코틀린 프로그래밍

2. 코틀린 필수 사항

다재다능 코틀린 프로그래밍 책으로 코틀린 스터디를 진행하면서 발표를 위해 준비했던 글입니다.


  • 세미콜론은 생략해도 된다.
    • 한 줄에 두 개 이상의 표현식이나 명령문을 사용할 때만 사용하자.
    • 세미콜론의 생략은 코드를 풍부하게 해준다.
  • 변수 타입 지정은 생략해도 된다.
    • 타입이 명확한 경우에는 타입을 생략할 수 있다.
    • 성능, 안전성 불안해하지 말자.
    • 메소드의 리턴타입은 명시하지 않아도 되지만 파라미터 타입은 명시해야 한다.
    • 적절한 변수 이름은 필수이다. (타입에 대한 정보는 넣지 말자.)
  • 클래스와 함수는 생략 가능하다.
    • 명령문이나 표현식이 메소드에 속할 필요 없고, 메소드는 클래스에 속할 필요가 없다.
    • JVM에서 동작하도록 코틀린이 자동으로 Wrapper 클래스로 감싸준다.
    • 메소드 내부에 있지 않고 단독으로 동작하는 코드는 생성자 안으로 넣어준다.
    • 물론 큰 애플리케이션을 작업할 땐 클래스와 메소드를 만들어야 할 것이다. 간단한 코드는 간단하게, 복잡한 코드는 정밀하고 구조적으로.
  • try-catch는 선택사항이다.
    • java의 checked exception에 대한 논쟁은 영원히 결론이 나지 않을 것이다. 이에 코틀린이 제공한 대안은 try-catch를 선택사항으로 만든 것이다.
    • 예외를 핸들링하지 않으면 프로그램이 종료되기에 방어적 프로그래밍은 필수이다.
    • 예외는 자동으로 호출한 코드로 전파된다.
  • 현명한 경고
    • 잠재적인 문제, 오류를 현명한 경고를 통해 보완한다. ex) 사용하지 않는 파라미터
    • 경고를 오류처럼 다루는 것이 올바른 소프트웨어 개발 습관이다. 코틀린에서는 -Werrpr 옵션으로 경로를 오류처럼 다룰 수 있다.
  • var 보다는 val
    • 변수의 이름이 타입보다 중요하다. 그래서 변수 이름이 타입 앞에 있다. ex) val pi : Double = 3.14
    • 자바에서 누락된 final을 찾는 것보다 코틀린에서 var를 찾는 게 훨씬 쉽다. → 변경 가능성으로 나올 수 있는 잠재적 오류를 찾기 쉽다.
    • val : immutable
    • var: mutable
  • 향상된 동일성 체크
    • java의 equals()와 kotiln의 '=='는 같다.
    • java의 '=='와 kotiln의 '==='는 같다.
    • 코틀린의 '=='는 null 체크를 먼저하고 equals() 메소드를 실행한다.
  • 문자열 템플릿
    • $ 심볼을 변수 앞에 붙이면 변수 대입이 가능하다.
    • 복잡한 표현식이라면 ${ }로 감싸서 사용할 수 있다.
    • $ 심볼 뒤에 변수나 표현식이 없으면 $ 자체의 문자로 취급된다.
    • 역슬래쉬를 이용하면 $ 심볼을 문자로도 취급할 수 있다.
  • RAW 문자열
    • 문자열의 시작과 끝에 큰따옴표 세 개(""")를 이용해 raw 문자열을 사용할 수 있다.
    • 문자열 템플릿을 사용할 수 있다.
    • + 연산자 없이 엔터로 줄 바꿈 문자를 포함할 수 있다. → + 연산자 없이 멀티라인 문자열을 만들 수 있다.
    • 메소드 안에서 사용 시 들여쓰기가 포함된다. 이때 수직선(|)과 trimMargin()메소드로 해결할 수 있다. 굳이 수직선(|)을 사용하지 않더라도 trimMargin()에 넘기는 인자를 통해 구분 문자를 변경할 수도 있다.
    • 간단한 문자열은 이스케이프 문자()가 필요한 문자열을 사용하고 복잡하거나 여러 줄을 써야 할 경우엔 raw 문자열을 사용하는 것이 좋다.
  • 표현식은 많이, 명령문은 적게
    • 명령문은 아무것도 리턴하지 않으며 상태를 변하게 하는 부작용을 가지고 있다.
    • 표현식은 결과를 리턴해주고 어떤 상태도 변화시키지 않는다.
    • 명령문보다 표현식을 제공해준다.
    • 표현식을 사용하면 코드가 덜 지저분해지고 오류도 덜 발생한다.
    • 대입연산자 = 는 표현식으로 취급되지 않는다. ex) a = b = c // 오류, 뒷부분에서 자세히 다룬다.
    • if 와 try-catch도 표현식으로 취급한다.
  • new 키워드를 쓰지 않는다. 구냥 생성자에 넣어준다.