LeeWang_31
이왕31
LeeWang_31
전체 방문자
오늘
어제
  • 분류 전체보기 (234)
    • 프로젝트 (2)
      • 사이드 프로젝트 (2)
      • Codestates_pre_project (0)
    • 프론트엔드 (169)
      • Html (19)
      • CSS (18)
      • JavaScript (29)
      • Codestates (76)
      • 코딩노트 (27)
    • 백엔드 (10)
      • node (10)
    • 구르는 돌 🌑 (16)
      • Codestates (11)
      • 생각 (4)
      • 공부 흔적 (1)
    • 정보 (18)
      • 오류노트 (2)
      • 인텔리제이 정보 (9)
      • 깃 정보 (3)
      • 기타 정보 (4)
      • 안드로이드스튜디오 정보 (0)
    • CS (7)
      • 이론공부 (7)
    • App (6)
      • Android (3)
      • Kotlin (3)
    • 컴퓨터 수학 (5)
      • 암호론 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ubuntu
  • UI/UX
  • 파이어베이스연동
  • linuix 코드스테이츠
  • 코드스테이츠
  • 코플릿
  • 사용자 친화 웹
  • css
  • 백준
  • 생활코딩
  • 사용자친화웹
  • 번들링
  • 1292
  • 알고리즘
  • linux
  • 안드로이드스튜디오파이어베이스
  • React
  • 웹팩
  • TODOlist
  • 코딩애플
  • codestate
  • JavaScript
  • 사이드프로젝트
  • figjam
  • 안드로이드스튜디오범블비
  • 2693
  • html
  • 2609
  • DP
  • 자바스크립트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
LeeWang_31

이왕31

2장 코틀린 기초 - 1
App/Kotlin

2장 코틀린 기초 - 1

2022. 7. 1. 16:44

본 게시글은 Kotlin In Action을 공부하고 정리한 글로 내용이 책과 조금 다를 수 있습니다.


2장에서 다루는 내용
∎ 함수, 변수, 클래스, enum, 프로퍼티를 선언 하는 방법
∎ 제어 구조
∎ 스마트 캐스트

2.1 기본 요소: 함수와 변수

모든 프로그램을 구성하는 기본 단위인 함수와 변수를 살펴본다.

Hello, World

모든 언어의 시작 'Hello, World'를 찍는 방법이다

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

<실행>

위 코드에는 어떤 코틀린 문법이나 특성이 있을까?

  • 함수의 선언은 fun키워드를 사용한다.
  • 파라미터 이름 뒤에 타입을 쓴다.
  • 함수의 최상위 수준에 정의할 수 있다.
  • 배열도 일반 클래스와 마찬가지다. 자바와 달리 배열을 처리하기 위한 문법은 없다.
  • 출력은 println이라 쓴다.
  • (;)붙이지 않아도 된다

함수

결과를 반환하는 함수의 경우 변환 값의 타입을 어디에 지정해야하는지 알아보자.

fun main() {
    println(max(4,3))
}

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

fun max (a: Int, b: Int): Int{

- Int값 a와 b를 받는 함수max는 Int값을 반환한다.

return if(a>b) a else b

- 조건문 a>b가 참일경우 a가 아닐경우 b가 출력 된다.

 

if가 문장이 아니고 결과를 만드는 식이라는 점이 중요하다.

(java일 결우 return문에 if문이 들어갈 수 없다.)

 

max함수를 더 간결하게 짤 수 있다.

fun main() {
  println(max1(4,3))
}

fun max1(a: Int, b: Int): Int = if(a>b) a else b

결과 값은 동일 하다.

Int이후 중괄호 {}를 사용하지 않고 수식의 형태인 = 을 사용해서 더 간결하게 만들수 있다.

 

본문이 중괄호로 둘러 싸인 함수를 블록이 본문인 함수라 부르고, 등호와 식으로 이루어진 함수를 식이 본문인 함수라 부른다.

 

함수의 반환타입을 지정하지 않으면 더 간결한 문장이 가능하다.

fun max1(a: Int, b: Int) = if(a>b) a else b

앞에서 살펴본 코틀린의 기능인 타입추론 덕에 가능하다.

변수

코틀린에서는 타입을 지정하지 않고 생략하는 경우가 흔하다

val question =  "점심 메뉴는 무엇을 먹을지에 대한 질문"

val answer = "120"

위에서는 타입표기를 생략했지만, 명시해도 괜찮다.

val answer : Int = "120"

 

초기화 식을 사용하지 않고 문자를 선언하는 경우 반드시 타입을 명시해야한다.

val answer : Int

answer = 120

 

val - value에서 따왔으며, 변경 불가능한 함수를 저장한다. 자바에서 final에 해당한다.

var - variable에서 따왔으며, 변경 가능한 함수를 저장한다. 자바에서 일반 변수에 해당한다.

가능하면 모든 변수는 val로 선언하고 필요할때만 var을 사용하라.

 

더 쉽게 문자열 형식: 문자열 템플릿

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

코드는 문자열 템플릿의 사용을 보여준다. name변수를 선언하고  다음 줄에 문자열 리터럴 안에 그 변수를 사용했다.

문자열 리터럴의 필요한 곳에 변수를 넣되 변수 앞에 $를 추가한다.

 

//java

System.out.println("Hello, " + name + "!");

 

$를 문자열에 넣고 싶으면 \로이스케이프 시켜 \$로 사용한다.

 

식도 {}를 사용 해서 문자열 템플릿 안에 넣을수 있다.

Ex)  println("Hello, ${ args[0] }!") //Kotlin

 

{}안에서 ""를 사용 할수 있다.

Ex)  println("Hello, ${ if (args.size > 0) args[0] else "someone" }!") //Kotlin

 


2.2 클래스와 프로퍼티

클래스를 선언하는 기본 문법에 대해 말하려 한다.

자바빈 클래스인 Person을 정의하고, name이라는 프로퍼티를 넣어 본다.

그리고 인텔리 제이 기능을 통해 같은 클래스를 코틀린으로 convert해보자.

차이를 보자면 getter가 보이지 않고, public도 보이지 않는다.

 

자바에서는 생성자 본문에 getter, setter와 같은 코드가 반복적으로 들어가는 경우가 많다.

코틀린에서는 이러한 대입 로직을 훨씬 적은 코드로 작성 할 수있다.

  

코틀린의 기본 가시성은 public이라 생략이 가능하다.

프로퍼티

클래스라는 개념의 목적은 데이터를 캡슐화하고 캡슐한 데이터를 다루는 고들르 한 주제에 다루는 것이다.
자바에서는 데이터를 필드에 저장하고, 멤버 필드의 가시성은 private다. 클래스는 자신을 사용하는 클라이언트가 그 데이터에 접근하는 통로로 쓸 수 있는 접근자 메서드를 제공한다. 보통 필드를 읽기 위한 게터를 제공하고 필드를 변경하게 허용하는 경우 세터를 추가 제공할 수 있다.

자바에서는 필드와 접근자를 한데 묶어 프로퍼티라 한다. 이를 사용하는 프레임 워크가 많다. 코틀린은 프로퍼티를 언어 기본 기능으로 제공하며, 코틀린 프로퍼티는 자바의 필드와 접근자를 완전히 대신한다. 클래스에서 프로퍼티를 선언할때 val이나 var을 사용한다.

class Person(
        val name: String,           //읽기 전용 프로퍼티로, 
                                    // 코틀린은 (비공개)필드와 필드를 읽는 단순한 (공개)게터를 만든다.
        var isMarried: Boolean      //쓸 수 있는 프로퍼티로, 
                                    // 코틀린은 (비공개)필드,(공개)게터, (공개)세터를 만든다.
)

코툴린에서 Person clss를 사용하면 다음과 같이 사용 할 수 있다.

fun main(){
    val person = Person("Sso",false)
    println(person.name)

    println(person.isMarried)
}

>>Sso
>>false

출력은 다음과 같다.

커스텀 접근자

class Rectangle (val height : Int, val width: Int) {
    val isSquare: Boolean
        get() {
            return height == width
        }
}

get()으로 게터를 생성 할 수 있다.

get() = height == width로 return 이 없는 없는 더 간결한 문장으로 만들수 있다.

코틀린 소스코드 구조: 디렉터리와 패키지

 

import사용 예제이다.

경로 Chaper2.geometry.shapes에 저장된 List2-8.kt코드를 보자

package Chaper2.geometry.shapes

import java.util.Random //표준 자바 라이브러리 클래스인 Random 클래스를 임포트 했다

class Rectangle(val height: Int, val width: Int) {
    val isSquare: Boolean
        get() = height == width

}

fun createRandomRectangle(): Rectangle {
    val random = Random()
    return Rectangle(random.nextInt(), random.nextInt())
}

fun createRandomRectangle(): Rectangle = Rectangle(Random().nextInt(), Random().nextInt()) 이렇게도 표현이 가능하다.

 

경로 package Chaper2.geometry.example에 저장된 List2-9.kt코드를 보자.

package Chaper2.geometry.example

import Chaper2.geometry.shapes.createRandomRectangle // list2-8에 저장된 함수를 임포트

fun main(){
    println(createRandomRectangle().isSquare)
}

import Chaper2.geometry.shapes.*로 작성해도 같은 결과 값을 얻을 수 있다.

 

'App > Kotlin' 카테고리의 다른 글

1장 코틀린이란 무엇이며, 왜 필요한가?  (0) 2022.06.30
0장 Kotlin In Action 공부 시작  (0) 2022.06.30
    'App/Kotlin' 카테고리의 다른 글
    • 1장 코틀린이란 무엇이며, 왜 필요한가?
    • 0장 Kotlin In Action 공부 시작
    LeeWang_31
    LeeWang_31
    이왕 할 거면 기분 좋게

    티스토리툴바