👀학습목표 객채 선언의 정의 객채 선언의 의미와 객체 선언을 통한 싱글톤 자바 익명 클래스와 비슷한 객체 식 📕객체 선언 코틀린은 어떤 클래스에 인스턴스가 오직 하나만 존재하게 보장하는 싱글턴 패턴을 내장하고 있다. 싱글턴의 선언 방법은 클래스와 비슷한 방법으로 선언한다. [class 대신 object라는 키워드 사용] import java.io.* object Application { val name="My application" override fun toString()=name fun exit(){} } fun describe(app:Application)=app.name //Application은 타입임. fun main(){ println(Application) //Application은 값임...
Skils/Kotlin
코틀린 공부👀학습목표 앞에서 배운 내용을 토대로는 프로퍼티는 어떤 클래스 인스턴스나 파일 퍼사드에 묶인 변수이며, 자바 필드와 비슷하다고 설명했다. 하지만 일반적으로 코틀린 프로퍼티는 일반 변수를 넘어서, 프로퍼티 값을 읽거나 쓰는 법을 제어할 수 있는 훨씬 더 다양한 기능을 제공한다. 이번 글에서는 단순하지 않은 프로퍼티의 의미에 대해서 다룰것이다. 👀학습하기 전에 알면 도움 되는 용어 정리 필드(field) : 클래스 멤버 변수 프로퍼티(Property) : 필드와 게터 세터를 한 번에 묶어서 부르는 단어 📕최상위 프로퍼티 클래스나 함수와 마찬가지로 최상위 수준에 프로퍼티를 정의할 수 있다. 이런 경우 프로퍼티는 전역 변수나 상수와 비슷한 역할을 한다. import kotlin.* val prefix="Hell..
📕Null 참조 값 중에서 아무것도 참조하지 않는 경우를 나타내는 특별한 참조값들 여기서 참조는 어떤 할당된 객체도 가리키지 않는 참조를 뜻한다. 다른 참조와 비슷하게 동작하지 않는다. 🔎자바 vs 코틀린 💻자바 모든 참조 타입의 변수에 널을 대입할 수 있지만, 이때 이 참조 타입(하지만 값은 널)에 정의된 메서드나 프로터 리를 사용하려고 하면 NullPointerException(NPE)가 발생. --> 런타임에 프로그램을 실행해봐야 오류를 찾을 수 있는 최악의 오류 💻코틀린 널 값이 될 수 있는 참조 타입과 널 값이 될 수 없는 참조타입을 구분 해고 널 발생 여부를 컴파일 시점으로 옮겨주기 때문에 NullPointerException(NPE) 예외를 상당 부분 막을 수 있다. 📗널이 될 수 있는 타입..
📕멤버 가시성 가시성은 클래스 멤버마다 다르게 지정할 수 있다. 즉, 각각 어떤 영역에서 쓰일 수 있는지 결정할 수 있다. 🔎가시성 지정이 클래스 정의 시 중요한 부분인가? 가시성을 사용해 구현과 관련한 세부사항을 캡슐화함으로써 외부 코드로부터 구현 세부사항을 격리시킬 수 있기 때문이다. 코틀린에서는 클래스 멤버의 가시성을 다음과 같은 변경자 키워드로 지정할 수 있다. public(공개) : 멤버를 어디서나 볼 수 있다. 디폴트 가시성이 바로 public이다. 따라서 명시적으로 pulic을 표기할 필요는 없다. internal(모듈 내부) : 멤버를 멤버가 속한 클래스가 포함된 컴파일 모듈 내부에서만 볼 수 있다. protected(보호) : 멤버를 멤버가 속한 클래스와 멤버가 속한 클래스의 모든 하위 ..
📕클래스 💡클래스의 기본적인 형태 class 키워드 다음에 클래스 이름이 오고 그다음에 본문이 오는 형태로 구성된다. 클래스 본문에는 멤버 정의가 들어있다. class Person{ var firstName = " " var familyName= " " var age =0 fun fullname()= "$firstName $familyName" fun showMe(){ println("${fullname()} : $age") } } 위 클래스 정의는 모든 Person 클래스의 인스턴스마다 firstName, familyName, age라는 프로퍼티와, fullname(), showMe()라는 두 함수가 들어있음을 알려준다. 모든 프로퍼티에서 일반적으로 쓸 수 있는 기능에는 다음과 같이 마치 변수처럼 프로..
코틀린의 예외처리는 자바의 접근 방법과 아주 비슷하다. 함수는 정상 종료, 즉 어떤 값을 반환하거나 비정상적으로 오류가 발생한 경우 예외를 던질(thorw) 수 있다. 예외가 발생한 경우에는 함수를 호출한 쪽에서 예외를 잡아내거나(catch), (잡아내지 않는 경우) 함수 호출 스택의 위로 예외가 전달될 수 있다. 자바와 마찬가지로 오류 조건을 신호로 보내려면 throw 식에 예외 객체를 사용해야 한다. import java.util.* import kotlin.* fun main(){ val str=readLine()!!.toString() println(parseIntNumber(str)) } fun parseIntNumber(s: String): Int{ var num=0 if(s.length !i..
루프의 시작이나 끝 부분이 아닌 중간에서 종료 조건을 검사하면 편리할 수 있다. 이런 경우를 위해 코틀린은 몇 가지 식을 제공한다. break는 즉시 루프를 종료시키고, 실행 흐름이 루프 바로 다음 문으로 이동하게 만든다. continue는 현재 루프 이터레이션을 마치고 조건 검사로 바로 진행하게 만든다. 말로만 들으면 서로의 의미가 무엇인지 아마 헷갈릴 수 있다. fun main() { val a=IntArray(10) {it} var sum=0 for(x in 0..10){ if(x==5){ break; } print(x); //0,1,2,3,4 } } 위 경우에는 x가 5가되는 순간 break를 만나서 for문이 강제로 종료된다. fun main() { val a=IntArray(10) {it} v..
코틀린에서의 반복문은 세 가지 제어 구조를 제공한다. 📕do- while fun main(){ var sum=0 var n=0 do{ n=readLine()!!.toInt() sum+=n }while(n!=0) println("Sum: $sum") } do 와 while 키워드 사이에 있는 루프 몸통을 실행한다. while 키워드 다음에 있는 조건을 평가한다. 이 값이 참이면 1번 단계로 되돌아가고, 이 값이 거짓이면 루프 문 다음에 있는 문을 실행한다. 루프 몸통을 실행한 후에 조건을 검사하기 때문에 루프 몸통이 최소한 한 번은 실행한다는 사실을 유의해야 한다.! 📕while fun main(){ val num = Random.nextInt(1,101) var guess =0 while(guess!=n..
자바의 switch가 있다면 코틀린에는 when이 있다. 이번 글에서는 when에 대해서 작성해볼 예정이다. if문은 두 가지 가능성 중 하나를 선택하게 해 준다는 것을 우리는 알고 있다. 그리고 여러 개의 if문을 사용해서 순차적으로 검사하면서 여러 개 중 하나를 선택할 수 있다. fun hexDigit(n:Int):char{ if(n in 0..9) return '0'+n else if(n in 10..15) return 'A'+n-10 else return '?' } 하지만 여러 대안중 하나를 선택할 수 있는 기능이 있다면 여러 개의 if 문을 사용하는 것보단 훨씬 간결하게 코드를 짤 수 있을것이다. 이러한 기능을 제공해 주는 것이 바로 when이다. fun hexDigit(n:Int) char{ ..