목록분류 전체보기 (70)
hyeals study
* 확장함수(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 ..
* when식은 자바에서 switch문에 해당하는 코틀린 구성요소임. if식과 마찬가지로 값을 만들어내는 식임. 아래의 코드는 앞 게시물에서 사용한 enum 클래스를 이용해서 when식 구성한 예시임. 위의 코드는 color 파라미터에 전달된 값과 같은 분기를 찾는 기능을 함. * when이 값을 만들어내는 식이기 때문에 따로 getMnemonic함수의 반환형을 명시하지 않고 = 을 붙여서 when식 자체를 반환 값으로 직접 사용함. 자바와 달리 각 분기 끝에 break를 작성 하지 않아도 됨. 좀 더 나아가서 when에서 한 분기 안에 여러 값을 사용할 수 있음. 위의 코드처럼 when의 한 분기 안에서 여러 값을 사용할 수 있음. 이 때 값들을 콤마(,)로 구분해야 함. [코틀린에서 when은 자바의..