목록코틀린 (31)
hyeals study
컬렉션을 처리할 때 쓸 수 있는 코틀린 특성 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"을 참고함.
* 코틀린의 if 식은 값을 만들어내기 때문에 자바와 달리 3항 연산자가 따로 없음 일단 간단한 덧셈 기능을 하는 함수를 작성해보면 [덧셈 기능을 하는 함수] Expr 인터페이스: 단지 여러 타입의 객체를 아우르는 공통 타입 역할만 수행하는 인터페이스 인터페이스를 지정하기 위해서는 콜론(:)뒤에 인터페이스 이름을 작성하면 됨 Num 클래스: Expr 인터페이스를 구현하고, value라는 프로퍼티만 존재하는 클래스 Sum 클래스: Expr 인터페이스를 구현하고, Expr 타입의 객체를 인자로 받는 클래스 * eval 함수 is: 변수 타입 검사 (자바의 instanceof와 비슷), 코틀린에서는 is로 변수로 타입을 검사하고 컴파일러가 알아서 원하는 타입으로 캐스팅을 해줌. 이를 스마트 캐스트(smart ..