TIL_007 | Kotlin 문법

묘한묘랑·2023년 12월 5일
0

TIL

목록 보기
7/31

2차열 배열 선언법

알고리즘 문제를 kotlin으로 풀다 2차원 배열이 필요해져서 kotlin의 2차원 배열 선언법에 대해서 알아보았다.
그런데... 어라...? 기존 사용하던 언어와는 색달랐다.
내가 사용해 본 언어중에 이런 식으로 선언하는 언어가 있을까? 하고 찾아보니 dart정도가 가장 유사했던 것 같다.

val array = Array(3,{IntArray(3,{0})})
/*
* public inline constructor(size: Int, init: (Int) -> T) Array의 생성자
*/

첫번째 값으로 행을 정의하고, init 값으로 배열을 전달하여 2차원 배열로써 기능한다.
처음 봤을 때는 약간 어지러웠지만 시간이 지나고 다시보니 c언어의 pointer를 사용하여 2차원 배열을 정의하는 형태가 떠올라 재미있었다.

Ref Blog


Collection

마찬가지로 알고리즘 문제 풀이중 마주한 문제인데 Collection을 사용하는 과정에서 생긴 일이다.

Collection을 사용하려 하니 Element를 추가 하기 위한 method가 보이지 않았다.

plus() 라는 method가 있기에 일단 이건가...? 하고 무작정 값을 넣어 보았지만 그럼에도 바뀌는 것은 없었다.

plus라는 method를 검색하기 보다는 왜 이런 현상이 있는 것인가 무작정 Collection에 관해 검색을 해보니 kotlin의 경우 수정 가능한 Collection과 read-only인 collection이 나눠져 있다는 글을 보게 되었다.

아무래도 kotlin은 불변성에 대해 더욱 깊게 생각하며 개발을 해야할 것 같다.

현재 글을 쓰는 도중 문득 든 생각이 그렇다면 plus method는 그 값을 추가한 새로운 객체를 반환할 것 같다는 생각이 들어 검색해보니 아무래도 맞는 것 같다.

Ref Blog
관련 문서 -> 코틀린 공식 문서 Collection


object class

kotlin에서 singleton이 필요한 상황에 마주하여 검색해보니 object class로 해결이 가능하였다.

object class SomeClass{
	...
}

위와 같은 형태로 사용하는데 java로 decompile된 코드를 보니 기존 sigleton에서 instance를 public으로 주는 형태였다.

@NotNull
   public static final ResOrder INSTANCE;

	static {
     	 SomeClass var0 = new SomeClass();
     	 INSTANCE = var0;
   }

data class

Data classes in Kotlin are classes whose main purpose is to hold data. Data classes come automatically with additional member functions that allow you to print an instance to readable output, compare instances, copy instances, and more. Data classes are marked with data:

Kotlin의 데이터 클래스는 데이터를 보유하는 것이 주된 목적인 클래스입니다. 데이터 클래스에는 인스턴스를 인쇄하여 읽을 수있는 출력, 인스턴스 비교, 인스턴스 복사 등을 할 수있는 추가 멤버 기능이 자동으로 제공됩니다.

공식문서를 읽어보니 데이터 저장용 클래스를 정의할 때 가장 사용하기 좋은 문법인 것 같다.
java의 lombok 마냥 추가적으로 지원 해주는 기본 method들 또한 존재한다.

  • .equals()/.hashCode() pair
  • .toString() of the form "User(name=John, age=42)"
  • .componentN() functions corresponding to the properties in their order of declaration.
  • .copy() function (see below).

스파르타 국비 과제를 푸는 도중 튜터님과 이야기를 나누며 copy에 대하여 이야기를 들었다.
이후 copy에 대하여 좀더 알아보니 named arguments를 이용하여 일부만 수정하여 새로운 객체를 반환해줌으로써 불변성을 유지할 수 있어 상당히 마음에 들었다.

최근 typescript와 dart 그리고 kotlin을 써보며 느끼는 것이지만 새로운 언어들은 문법 사용법이 닮은 부분이 생각보다 있어서 꽤나 재밌게 학습 하는것 같다.

관련 문서 -> 코틀린 공식 문서 Data Classes


읽어봐야 할 것 -> 코틀린 공식 문서 Coding Convention

이후 세부적인 내용을 따로 빼서 작성하는 것도 생각해 봐야 할 것 같다.

profile
상황에 맞는 기술을 떠올리고 사용할 수 있는 개발자가 되고 싶은 개발자

0개의 댓글