누룽지맛치킨
어미새의 개발일지
누룽지맛치킨
전체 방문자
오늘
어제
  • 분류 전체보기 (86)
    • 코틀린 (8)
    • 안드로이드 (5)
      • 디자인 (2)
      • 개발 (2)
      • 도구 (1)
    • 피그마 (1)
    • 대외활동 (0)
    • 프로젝트 (0)
    • 백준 (55)
      • JAVA (55)
    • 알고리즘 (3)
    • 클라우드 (5)
    • 스터디 (2)
      • 코테 (2)
    • 자료구조 (5)
    • 컴퓨터 기술 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준 자바 2292번
  • 백준 자바 다이나믹 프로그래밍
  • 코틀린 인 액션
  • 백준 자바
  • Room version 올리기
  • 백준 자바 2559번
  • 클라우드
  • Room Migration
  • 자료구조
  • 안드로이드 디자인
  • 코틀린 runBlocking
  • 백준 자바 수열
  • 코틀린
  • 백준 자바 정렬
  • 알고리즘 조합
  • 백준 자바 벌집
  • 자바 Priority Queue
  • 클라우드 컴퓨팅
  • 안드로이드
  • 백준 자바 누적합

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
누룽지맛치킨

어미새의 개발일지

코틀린

What is Kotlin

2023. 1. 7. 00:31

Kotlin

  • 코틀린은 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어로 등장
    자바가 사용되고 있는 모든 용도에 더 간결하고 생산적이며 안전한 대체 언어 제공을 목적으로 함.
  • 특징
    • 자바 코드와의 상호운용성
    • 서버 개발, 안드로이드 앱 개발 등의 분야에서 사용
    • 함수형 프로그래밍 가능
      • 람다 식 -> 람다 식의 it은 람다 식의 유일한 인자를 바로 사용 가능!
      • 함수 타입
    • 안전성 강조
      • Nullable 타입 -> 해당 객체가 null일 경우 대체 값 지정 가능
      • ClassCastException 방지

정적 타입 지정 언어

모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증

 

  • 단, 코틀린에서는 모든 변수의 타입을 프로그래머가 직접 명시할 필요 X
  • 코틀린 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추 가능 -> 타입추론
  • 정적 타입 지정의 장점
    • 성능 : 컴파일 시점에 타입이 정해져있기 때문에 빠르다.
    • 신뢰성 : 컴파일러가 프로그램의 정확성 검증
    • 유지 보수성 : 처음 보는 코드를 다룰 때도 다루는 객체의 타입을 파악 가능
  • 코틀린의 Nullable type : null이 될 수 있는 타입을 지원함에 따라 컴파일 시점에 null pointer exception 발생 여부 검사 -> 신뢰성 증가

함수형 프로그래밍

  • 간결성 보장 -> 람다식을 통해 간결하게 표현 가능
fun findAlice() = findPerson{it.name == "Alice"}
fun findBob() = findPerson{it.name == "Bob"}
  • 다중 쓰레드를 사용해도 안전
    • 동기화 없이 사용 시 데이터 변경 위험
    • 함수형 프로그래밍 -> 불변 데이터 구조 사용
  • 테스트 쉬움 -> 함수 독립적으로 테스트 가능

 

코틀린의 함수형 프로그래밍 지원

  • 함수 타입 지원 -> 함수가 다른 함수를 파라미터로 받거나 새로운 함수를 반환 가능
  • 람다 식 지원
  • 데이터 클래스 -> 불변적인 값 객체를 간편하게 생성 가능
  • 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API 제공
  • 즉, 코틀린은 때에 따라 명령형 방식, 객체 지향 방식, 함수형 방식 모두 사용 가능!!!

코틀린의 철학

  • 실용성
    • 실제 문제를 해결하기 위해 만들어진 실용적인 언어
  • 간결성
    • 준비 코드(getter, setter) 묵시적 제공
    • 다양한 표준 라이브러리 제공 -> 코드의 양 감소
    • 연산자 정의 X(연산자 오버라이딩 불가) -> 읽기 쉬움
  • 안전성
    • 오류 중 일부 유형을 원천적으로 방지
    • JVM 사용 -> 메모리 안전성(garbage collection), 버퍼 오버플로우 방지, 동적 메모리 오사용 방지
    • 정적 타입 지정
    • NullPointerException 감소 -> Nullable 값 추적
    • ClassCastException 방지
      • 상호운용성
      • 자바와 코틀린 코드를 프로젝트에서 섞어 쓸 수 있음
if(value is String)
	println(value.toUpperCase())

코틀린 코드 컴파일

  • 코틀린은 .kt라는 확장자을 가짐
  • 컴파일 시 자바와 같이 .class 파일로 변환
  • 코틀린에서 제공하는 추가적인 API를 동작시기키 위해 코틀린 런타임 라이브러리 필요
  • Maven, Gradel, Ant 등의 빌드 시스템 사용

대화형 쉘

  • REPL
  • REPL에서 코틀린 코드를 한 줄 입력하면 즉시 그 코드를 실행한 결과를 볼 수 있다.
  • REPL 시작법
    • kotlinc 명령어 사용
    • IntelliJ 아이디어 플러그인 메뉴(Tool -> 코틀린 -> 코틀린 REPL)

🔔 성찰

6개월 정도 안드로이드 스튜디오를 사용하면서 코틀린 언어를 사용해왔다. 코틀린 언어란 무엇인가에 대해서 고민을 하지 않고 사용해왔고 코틀린이란 무엇인지에 대해 공부하면서 이때까지 코틀린 언어에서 사용하던 것들이 왜 그런 구조를 가지고 있는지에 대해 이제 알게 되었다. 기존에 자바를 매우 좋아하고 즐겨쓰던 내가 코틀린 언어를 사용하면서 매우 간결한 매력에 코틀린도 좋아했지만 코틀린이 이런 철학을 가지고 있고 훨씬 더 많은 고민을 가지고 탄생한 언어라는 것을 알게 된 것 같다. 코틀린 언어는 정말 매력적인 언어고 단순히 코딩을 공부하는 것으로는 많이 부족하다는 생각이 들었다.

  • 앞으로 공부하고 싶은 것
    • 안드로이드 스튜디오를 사용하면 접하던 gradle이 빌드 시스템이란 것을 알게 됨. gradle에 대해 깊이 공부해보고 싶음.
    • 코틀린으로 함수형 방식을 정말 잘 알고 사용하고 싶다. 함수형 프로그래밍 언어와 코틀린이 어떻게 사용되는지에 대해 공부해보자.

 

 

참조 : KOTLIN IN ACTION

'코틀린' 카테고리의 다른 글

Iteration  (0) 2023.01.26
선택 표현과 처리  (0) 2023.01.25
클래스와 프로퍼티  (0) 2023.01.25
함수와 변수  (0) 2023.01.25
🔥코틀린 시작  (0) 2023.01.06
    '코틀린' 카테고리의 다른 글
    • 선택 표현과 처리
    • 클래스와 프로퍼티
    • 함수와 변수
    • 🔥코틀린 시작
    누룽지맛치킨
    누룽지맛치킨

    티스토리툴바