본문 바로가기

전체 글

Kotlin - 인터페이스 (Interface) https://kotlinlang.org/docs/interfaces.html Interfaces | Kotlin kotlinlang.org Kotlin 에서 인터페이스는 추상 메소드와 구현된 메소드를 모두 가질 수 있다. 상태를 저장 할 수 없다는 점이 추상 클래스(abstract)와 다르다. 인터페이스가 속성을 가질 수는 있지만 속성이 추상화 되어 있거나, 접근자(accessor)를 구현 해야 한다. 선언 과 구현 인터페이스는 interface 키워드를 이용해서 정의하고 클래스에서는 하나 이상의 인터페이스를 구현 할 수 있다. interface MyInterface { fun bar() fun foo() { // body } } class Child: MyInterface { override fun .. 더보기
Kotlin - 속성 (Properties) 속성 선언 하기 Kotlin 클래스에서는 val, var 키워드로 속성을 선언 할 수 있다. val 는 read-only, var는 변경가능한 속성을 선언 할때 사용한다. class Address { val name: String = "Holmes, Sherlock" var zip: String = "123456" var state: String? = null } 속성을 사용하기 위해서는 속성 명을 사용한다. fun copyAddress(address: Address): Address { val result = Address() // there's no 'new' keyword in Kotlin result.name = address.name // accessors are called // ... ret.. 더보기
Kotlin - 상속 (Inheritance) Java의 모든 클래스가 Object의 자식 클래스 이듯이 Kotlin 의 모든 클래스는 Any 의 자식클래스가 된다. Any 클래스는 equals(), hasCode(), toString() 함수를 가지고 있다. 그래서 이 함수들은 Kotlin의 모든 클래스에 존재 한다. 그리고 Kotlin의 모든 클래스는 final로 선언 되기 때문에 상속이 불가능 하다. 혹시 이후 확장을 위해 상속 가능하도록 클래스를 선언 하고 싶다면 open 키워드를 사용해야 한다. open class Base // Class is open for inheritance 명시적으로 부모 클래스를 선언하기 위해서는 class header 부분에 부모 클래스를 작성 하면 된다. open class Base(p: Int) class D.. 더보기
Kotlin - Packages and imports https://kotlinlang.org/docs/packages.html Packages and imports | Kotlin kotlinlang.org package 정의는 소스파일의 맨 위에 작성한다. 소스파일에 작성되는 함수나 클래스 같은 내용들은 모두 정의된 패키지에 포함되게 된다. 따라서 아래 코드에서 printMessage() 함수나 Message 클래스의 풀 네임은 org.example.printMessage, org.example.Message 가 된다. package org.example fun printMessage() { /*...*/ } class Message { /*...*/ } // ... 만약 패키지가 정의되지 않았다면, 파일은 이름이 없는 기본 패키지에 속하게 된다. 기본.. 더보기
Kotlin - Exceptions https://kotlinlang.org/docs/exceptions.html Exceptions | Kotlin kotlinlang.org Exception classes Kotlin의 모든 exception 클래스는 Throwable을 상속하기 때문에, message, stack trace, optional cause를 가진다. 예외를 발생시키기 위해서는 다른 언어들과 마찬가지로 throw 표현식을 사용한다. throw Exception("Hi There!") 이렇게 던져진 예외를 잡기 위해서는 try ... catch ... finally 표현식을 사용한다. try { // some code } catch (e1: SomeException) { // try 블럭의 코드를 실행하다 SomeExcept.. 더보기
Kotlin - Returns and jumps 아래 3키워드 들은 Kotlin에서 코드를 jump 하려고 할때 사용되는 표현식 들이다. return return 이 포함된 가장 가까운 함수의 결과값을 반환한다. break break 가 포함된 가장 가까운 반복문(loop) 가 종료 된다. continue continue 가 포함된 가장 가까운 반복문의 다음 스텝을 진행한다. 위 키워드들은 모두 표현식이기 때문에 다른 표현식의 일부로 작성 될 수도 있다. (Nothing 타입) // 표현식 이기 때문에 이런 표현이 가능하다 val s = person.name ?: return Break and continue labels Kotlin 은 표현식에 label을 붙이는 것이 가능하다. Label을 붙이고 싶은 표현식 앞에 "{label명}@" 형태의 la.. 더보기
Java - Collection(List, Set...) 가변(mutable) 객체 초기화 (Arrays.asList()) List.of나 Set.of 함수를 이용하면 List, Set을 간편히 생성 할 수 있다. 하지만 이렇게 생성한 객체는 불변객체(immutable) 여서 변경 작업이 불가능 하다. (add 작업 시 UnsupportedOperationException이 발생한다.) List list = List.of("a", "b", "c"); Set set = Set.of("a", "b", "c"); list.add("d"); // java.lang.UnsupportedOperationException set.add("d"); // java.lang.UnsupportedOperationException 따라서, 변경 가능한 Collection 객체를 만들고 싶을때는 Array.asList 함수를 이용해서 List.of.. 더보기
JAVA - for 문으로 map의 key, value를 탐색하는 방법 (EntrySet 이용) 보통의 경우 for 문으로 map을 순회하고 싶을때는 아래처럼 key 를 받아오고, 이 key를 이용해서 value 를 다시 조회하는 형태로 했다. Map map = new HashMap(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); Set keys = map.keySet(); for(String key : keys) { String value = map.get(key); System.out.println(key + " : " + value); } 이 방법은 value를 찾아와야 하는 단계를 더 거치게 되어 비 효율적이고 뭔가 깔끔치 못하다. Key, Value 를 포함하고 있는 데이터 타입인 Entr.. 더보기