본 게시글은 부스트코스의 코틀린 기본프로그래밍을

시청한 후 학습한 정보를 기록하는 목적의 게시글입니다.

부스트코스

 

다 함께 배우고 성장하는 부스트코스

부스트코스(boostcourse)는 모두 함께 배우고 성장하는 비영리 SW 온라인 플랫폼입니다.

www.boostcourse.org

코틀린 기본프로그래밍(1/2)

 

코틀린 프로그래밍 기본1/2(함수편)

부스트코스 무료 강의

www.boostcourse.org

본 게시글은 부스트코스 서포터즈 3기 활동 게시글입니다.


#1-1. 코틀린 너는 누구니?

- 들어가기 전에

이 장에서는 코틀린 언어가 등장하게 된 배경과 특징을 살펴 보겠습니다. 코틀린은 이전 프로그래밍 언어가 가지고 있던 단점을 많이 개선했습니다. 그리고 함수형 프로그래밍, 람다식 표현과 같은 현대 프로그래밍 언어의 기능도 많이 포함하고 있습니다.

- 핵심 키워드

  • Kotlin/JVM
  • Nullable, Notnull
  • 멀티플랫폼
  • 정적 언어(Statically typed Language)
  • NPE(Null Pointer Exception)

 

1) 코틀린의 탄생 배경

객체 지향의 대형 프로젝트를 위해서 `Java`언어가 많이 사용되어 왔다.

다양한 플랫폼에서 개발을 지원하기 위해 `Kotlin`이 탄생되었다.

  • IDE로 유명한 JetBrains에서 개발하고 보급
  • 코드가 간결하고 다재 다능하며 호환성이 높다.
  • 문장 끝에 세미콜론은 옵션이다.
  • Android Studio의 공식 언어
  • 변수는 Nullable과 NotNull로 나뉘는데, 변수 선언 시 `?`를 붙여 Nullable로 만들 수 있다.

 

2) 사용 가능한 플랫폼

  • Kotlin/JVM : 자바 가상 머신 상에서 동작하는 앱을 만들 수 있다.
  • Kotlin/JS : 자바스크립트에 의해 브라우저에서 동작하는 앱을 만들 수 있다.
  • Kotlin/Native : LLVM기반 네이티브 컴파일을 지원해 여러 타깃의 앱을 만들 수 있다.
    iOS, MacOS, Android, Window, Linux. WebAssembly등..

 

3) 코틀린의 장점

  • 자료형에 대한 오류를 미리 잡을 수 있는 정적 언어
  • 널 포인터에 의한 프로그램의 중단을 예방할 수 있다.
    = Null Pointer Exception에서 자유롭다
  • 데이터형 선언 시 널 가능한 형식과 불가능한 형식이 지원된다.
  • 자바와 완벽하게 상호운영이 가능하다.

 

#1-2. 개발 환경을 꾸며 보아요

- 들어가기 전에

JVM 상에서 실행하는 프로그램 개발을 위해서 어떤 SDK를 선택해야 할까요? 여기서는 JDK를 설치하고 개발 환경을 위해 IDE를 설치하는 방법에 대해 이야기 합니다.

- 핵심 키워드

  • JDK
  • Oracle JDK vs OpenJDK
  • Julu
  • IntelliJ IDEA
  • 프로그램 진입점(Entry Point) - main()

 

1) 자바 JDK 설치하기

코틀린을 JVM에서 실행하기 위해 JDK를 사용한다.

기존 자바와 상호작용할 수 있고 자바 라이브러리를 이용할 수 있다.

 

2) JDK 배포판의 선택

Zulu Builds of OpenJDK

 

Java Download | Java 8, Java 11, Java 13 - Linux, Windows & macOS

Download Java Builds of OpenJDK 8, 11, 13 & 15. Azul Zulu Builds of OpenJDK runs on Linux, Windows, macOS & Solaris on X86, Arm, SPARC & PPC

www.azul.com

 

3) JDK 설치해 보기

Java 11 (LTS) 버전으로 설치 할 예정이다.

본인의 운영체제에 맞게 선택하여 설치하도록 하자.

컴퓨터의 환경마다 다르겠지만 나는 아래의 주소로 zulu를 설치하였다.

C:\Program Files\Zulu\zulu-8\

이후 환경설정에서 설치된 주소로 시스템 주소를 추가하도록 하자.

이후 path에도 지정된 경로가 추가되었는지 확인하자.

win + r - cmd

cmd창에서 java -v를 입력하여 설치한 자바의 버전을 확인하자.

C:\Users\nani6>java -version
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (Zulu 8.50.0.51-CA-win64) (build 1.8.0_275-b01)
OpenJDK 64-Bit Server VM (Zulu 8.50.0.51-CA-win64) (build 25.275-b01, mixed mode)

 

다음으로 intellij IDEA를 설치하여야 하는데,

나는 이미 설치가 되어 있는 상태이기에 생략하였다.

URL에서 Communtiy version을 설치하면 된다.

 

다운로드 IntelliJ IDEA: 우수성과 인체 공학이 담긴 JetBrains Java IDE

최신 버전 다운로드: IntelliJ IDEA (Windows, macOS, Linux)

www.jetbrains.com

fun main() {
    println("Hello World!")
}

실행창에 정상적으로 결과가 출력된다면,

코틀린 개발 환경이 세팅된 것이다.

 

#1-3 안녕 세상아!

- 들어가기 전에

본격적으로 첫 번째 프로젝트를 이해해 볼까요? 앞으로 실습을 진행하면서 여러 번 프로젝트를 생성하기 때문에 이 내용을 잘 익혀둡니다.

 

- 핵심 키워드

  • 진입점
  • 함수 fun 키워드
  • 바이트코드

 

- 도구 창의 단축키: 윈도우(맥)

  • Messages Alt + 0 (Cmd + 0)
  • Project Alt + 1 (Cmd + 1)
  • Favorites Alt + 2 (Cmd + 2)
  • Run Alt + 4 (Cmd + 4)
  • Debug Alt + 5 (Cmd + 5)
  • TODO              Alt + 6 (Cmd + 6)
  • Structure Alt + 7 (Cmd + 7)
  • Terminal Alt + F12 (Option + F12)

코틀린의 main()은 최상위 함수로 실행 진입점이다

코틀린에서 main()함수는 실행 진입점입니다. 자바와 같은 객체 지향 언어에서는 프로그램을 실행하려면 최소한 하나의 클래스와 그 안에 실행할 수 있는main()함수가 있어야 합니다. 하지만 코틀린은 선언된 클래스가 없는데도 불구하고 main()메서드 하나로 println()함수를 통해 콘솔에 문자열 "Hello Kotlin"을 출력 하고 있습니다.

실제로 코틀린 코드는 JVM상에서 실행하기 위해서main 메서드는 파일명을 기준으로 자동으로 클래스가 생성됩니다. 만들어진 파일은 IntelliJ IDEA의 메뉴에 [Tools → Kotlin → Show Kotlin Bytecode]를 누른 후 생성된 화면에서 [Decompile]을 사용해서 어떤 형태로 소스가 해석 되었는지를 확인해 볼 수 있습니다.

// Decompile된 소스
public final class HelloKotlinKt {
   public static final void main() {
      String var0 = "Hello Kotlin!";
      System.out.println(var0);
   }

   // $FF: synthetic method
   public static void main(String[] var0) {
      main();
   }
}

생성된 소스에서 main() 메서드를 보면 HelloKotlinKt클래스 안에 속한 멤버 메서드로 선언되어 있는 것을 알 수 있습니다. 이것은 자바 가상 머신인 JVM에 실행되기 위해, 문자열은 String var1으로 선언되어 System.out.println()에 의해 콘솔 장치에 출력 되는 것이죠.

 

main()에서 매개변수를 사용할 경우

main()에서 매개변수 args: Array<String>를 사용할 경우 자바의 String[] args로 변환됩니다. 이 args는 main()에 전달할 외부의 인수들을 가리키게 되고, 명령행으로부터 입력 받은 값들이 차례로 배열에 들어가게 됩니다.


fun main(args: Array<String>) {
    println("args[0] = ${args[0]}")
    println("args[1] = ${args[1]}")
    println("args[2] = ${args[2]}")
    println("args[3] = ${args[3]}")
}

Edit Configurations... 에서 main 함수로 보낼 인자를 지정할 수 있다.

 

  • main을 타이핑하고 tab키를 누르면 코드 어시스트에 의해 자동 완성 된다.
  • 실행단축키 : Ctrl + Shift + F10
  • class가 없는데 main 메서드 하나로 println을 콘솔에 실행하고 있다.
  • 실제로는 main 메서드는 파일명을 기준으로 자동으로 클래스가 생성된다.
  • 프로그램 외부에서 인자를 받아들인다. main(args: Array<String>
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기