목록Kotlin (32)
hyeals study
* 로컬(local) 함수를 사용하면 코드의 중복을 없앨 수 있으며 구조를 깔끔하게 유지할 수 있음. 이를 확인하기 위해 아래에 사용자를 데이터베이스에 저장하는 함수 예시가 있음 위의 코드에서 user.name.isEmpty() 부분과 user.address.isEmpty() 부분이 중복됨 (필드를 검사하는 부분) 위의 코드는 중복되는 부분이 그리 많지 않지만 중복이 많이 생기는 코드는 구조가 복잡해짐. ☞ 이러한 검증 코드를 로컬 함수로 분리하면 중복을 없앨 수 있으며 구조가 깔끔해짐 validate(user, user.name, "Name"), validate(user, user.address, "Address") 부분에서 필드를 검증 결과적으로 검증 로직 중복이 사라지고, 필요에 따라 다른 User..
컬렉션을 처리할 때 쓸 수 있는 코틀린 특성 vararg 키워드: 호출 시 인자 개수가 달라질 수 있는 함수를 정의할 수 있음 중위(infix) 함수 호출 구문: 인자가 하나뿐인 메소드를 편하게 호출 가능 구조 분해 선언(destructuring declaration): 복합적인 값을 분해해서 여러 번수에 나눠 담을 수 있음 [가변 인자 함수] : 인자의 개수가 달라질 수 있는 함수 가변 인자 함수에 대해 알아보기 위해 리스트를 생성하는 코드가 아래에 있음 여기서 리스트 생성 함수(listOf)가 가변 인자 함수임. (리스트를 생성할 때 원소의 갯수를 원하는 만큼 전달할 수 있기 때문) kotlinlang.org에서 listOf 함수의 정의를 볼 수 있는데 다음과 같음. 위에 보이는 정의처럼 파라미터 앞..
* 확장함수(extension function): 어떤 클래스의 멤버 메소드인 것처럼 호출할 수 있지만 그 클래스 밖에 선언된 함수. [확장함수 만드는 방법] : 추가하려는 함수 이름 앞에 그 함수가 확장할 클래스의 이름을 붙이면 됨. 예를 들어, 아래의 함수는 어떤 문자열의 마지막 문자를 알려주는 기능을 하는 함수임. 수신 객체 타입(receiver type): 확장 함수가 호출되는 대상이 되는 값(객체)의 타입(여기서는 String이 해당됨), 확장이 정의될 클래스 타입임. 수신 객체(receiver object): 확장함수가 호출되는 대상이 되는 값(객체). (여기서는 this가 해당됨) 위 코드는 아래와 같이 사용할 수 있음 ☞ 함수를 호출하는 방법이 일반 클래스 멤버를 호출하는 방법과 같음 여기..
앞서 컬렉션을 만드는 방법에 대해 살펴봤으니 간단하게 모든 원소를 출력하는 코드를 구현할 수 있음 위 코드의 println(list) 부분에서 toString함수가 호출됨 (이는 디폴트로 자바 컬렉션에 들어있음) 출력 결과는 아래와 같음. 하지만 위 디폴트 형식이 원하는 형식이 아닐 경우가 있음. ☞ 코틀린에서는 이런 문제를 처리할 수 있는 함수가 표준 라이브러리에 이미 들어있음. 목표: 출력되는 형식을 [ , , ]가 아니라 ( ; ; )이런식으로 되게끔 하는 함수를 만들 것. 코틀린이 지원하는 기능을 사용하지 않고 함수 구현 코틀린이 지원하는 기능을 사용해서 함수 구현 [코틀린이 지원하는 기능을 사용하지 않은 함수] joinToString 함수: 컬렉션의 원소를 StringBuilder의 뒤에 덧붙임..
* 컬렉션: 자바에서 데이터 저장하는 자료구조들을 관리와 사용의 편리성을 주기 위해 제공하는 프레임 워크 ☞ 대표적으로 Set, List, Map 등이 있음. [컬렉션을 만드는 방법] 위의 코드는 각각 집합, 리스트, 맵을 만드는 방법임 여기서 to는 키워드가 아닌 함수임. (이에 대해서는 나중에 다시 다룸) 다음으로 여기서 만든 객체가 어떤 클래스에 속하는지 알아볼 수 있는 방법이 있음. 위와 같은 코드를 작성하면 객체가 어떤 클래스에 속하는지 알 수 있음. 해당 코드의 결과를 보면, 위와 같이 나오는 것을 확인할 수 있음. 이를 통해 알 수 있는 점: 코틀린은 자신만의 컬렉션 기능을 제공하지 않음. ☞ 이유: 코틀린이 표준 자바 컬렉션을 활용하면 자바 코드와 상호작용하기 쉽기 때문 ☞ 하지만 코틀린에..
[예외 처리] : 코틀린에서 예외 처리는 자바와 비슷함. 오류가 발생하면 예외를 던질 수(throw) 있음. ☞ 예외를 받은 쪽에서 발생한 예외를 처리(catch)하지 않으면 함수 호출 스택을 거슬러서 예외 처리하는 부분이 나올 때 까지 계속해서 예외를 던짐(rethrow) 예외 처리를 하는 방법은 다음과 같음 코틀린의 다른 클래스들과 마찬가지로 예외 인스턴스를 생성할 때도 new를 붙일 필요가 없음. * 코틀린에서 throw는 식임. ☞ 따라서 다른 식에 포함 될 수 있음 이는 아래의 예시를 통해 확인 할 수 있음 위 코드에서 if 조건이 참이 되면 percentage 변수가 number 값으로 초기화 됨. if 조건이 것이 되면 변수가 초기화 되지 않음 [try, catch, finally] : 코틀..
코틀린의 특성 중 자바와 가장 비슷한 것이 이터레이션임. [while loop] * 코틀린에는 while과 do-while 루프가 있음. (이 두개는 자바와 같음) 위의 코드 처럼 구조가 자바와 다르지 않음. 기능도 마찬가지. [for 루프] 코틀린의 for 루프는 자바의 for-each루프에 해당하는 형태만 존재. 코틀린의 for 루프에서는 범위(range)를 사용함. * 범위: 두 값으로 이루어진 구간 위의 코드처럼 ..연산자로 시작 값과 끝 값을 연결해서 범위를 만듦 따라서 위의 oneToTen은 1부터 10까지라는 뜻의 범위임. 이제 범위에 있는 값을 for 루프를 통해 차례로 출력하는 코드를 작성할 것임. 위와 같이 범위를 이용해서 for 루프를 간단히 작성할 수 있음. 이번엔 10부터 역방향으..
if 와 when 모두 분기에 블록을 사용할 수 있음 ☞ 이 경우 블록의 마지막 문장이 그 분기의 결과가 됨. (이는 분기에서의 블록, try ... catch에서의 블록, 람다의 블록에서도 쓰일 수 있음. 하지만 함수의 블록에서는 사용 불가능(반드시 return이 들어가야 함)) 앞 게시물에서 구현한 eval 함수에 블록을 추가하는 예시를 들 것임. 위 코드에서는 e.value 와 left + right 가 각 분기의 결과값임 출력 결과를 보면 연산이 이뤄진 순서를 알 수 있음. 본 게시물은 "Kotlin IN ACTION"을 참고함.