목록Kotlin (8)
nueijeel
코틀린 최종 제출 과제를 구현하던 중 StreamCorruptedException 오류가 발생했다. 작성 중인 프로그램의 구조를 간단히 요약해 설명해보면, - 카테고리를 생성하고, 카테고리 하위에 메모들을 생성할 수 있게 하는 프로그램인데, 카테고리와 메모들은 생성/수정/삭제가 가능하다. - 카테고리는 사용자에게 이름을 입력받아 파일의 이름으로 사용했고, 메모는 제목과 내용을 입력받아 해당하는 카테고리 파일에 객체로 작성하는 형식을 사용했다. 이런 형식의 프로그램이다. 카테고리에 등록된 메모 내용을 수정해 파일에 다시 저장하는 과정에서 StreamCorruptedException 오류가 발생했다. stack overflow에서 몇 가지 비슷한 오류 케이스를 찾았지만 영어를 해석해도 솔루션이 무슨 말인지 ..
2023.05.17 1. Companion Companion : 클래스를 정의할 때 멤버를 정적 요소로 만들어주는 키워드로, companion 요소는 객체를 생성하지 않아도 클래스 이름을 사용해 접근이 가능하다 자바에서의 static 키워드와 동일한 역할을 한다. fun main(){ println("Companion 변수 a2 : ${TestClass.a2}") println("Companion 변수 a3 : ${TestClass.a3}") TestClass.testMethod2() val t1 = TestClass() t1.testMethod1() } class TestClass{ var a1 = 100 fun testMethod1(){ println("a1: $a1") println("a2: $a2..
2023.05.16 1. Any Any : 코틀린에서 모든 클래스가 직접 혹은 간접적으로 상속받는 클래스 자바의 최상위 클래스가 java.lang.Object 클래스라면 코틀린의 최상위 클래스는 Any 클래스이다. 클래스 정의 시 상속에 대한 코드를 별도로 작성하지 않는다면 Any 클래스를 자동으로 상속받는다. fun main(){ val a1 : Any = TestClass1() println(a1) } class TestClass1 body 구현이나 상속 등을 사용하지 않는 TestClass1을 선언만 했다. 해당 클래스는 Any 클래스를 자동으로 상속받기 때문에, 객체를 Any형 참조 변수에 담아 사용할 수 있다. Any 클래스 안에는 클래스가 갖춰야 할 기본적인 기능들이 들어있다. Any 클래스가..
2023.05.15 1. 지연 초기화 예외적으로 변수 선언과 동시에 초깃값을 할당할 수 없는 경우가 생기는데, 이때는 lazy나 lateinit 키워드를 사용하여 초기화를 미룰 수 있다. fun main(){ val a = 1 val b = 10 lateinit var data1 : String val data2 : Int by lazy{ data1 = b a+b } } data1은 lateinit 키워드로 초기화를 미룬 변수이고, data2는 lazy 키워드로 초기화를 미룬 변수이다. lazy 키워드로 초기화하는 변수는 {} 괄호 안에 작성된 내용이 수행된 결괏값을 초깃값으로 할당한다. 괄호 안에 작성된 코드가 여러 줄인 경우에는 맨 마지막 줄의 실행 결과만이 초깃값으로 할당된다. 이 코드에서는 laz..
2023-05-15 1. 상속 상속 : 클래스를 설계할 때 다른 클래스가 가지고 있는 부분을 물려받는 개념으로 이를 통해 클래스마다 중복된 부분을 하나의 클래스에 만들 수 있다. 상속을 해주는 클래스를 부모 클래스(SuperClass)라고 하고, 상속을 받는 클래스를 자식 클래스(SubClass)라고 한다. open class SuperClass{} class SubClass : SuperClass{} 코틀린에서 클래스를 정의하면 컴파일 했을 때 자바 코드에서는 final 클래스가 된다. 따라서 상속 관계의 부모 클래스를 정의할 때는 open 키워드를 사용해 정의해야한다. 그러면 자바 코드로 컴파일해도 일반 클래스가 되어 상속이 가능하다. 자식 클래스는 이름 옆에 콜론을 사용해 상속 받을 부모 클래스 이..
2023.05.12 1. 클래스 fun main(){ val t1 = TestClass1() val t2 = TestClass2() //t1 변수에 담긴 TestClass1의 객체 ID 출력 println("t1: $t1") //TestClass2 객체의 멤버 변수 출력 println("t2.a1: ${t2.a1}") println("t2.a2: ${t2.a2}") //t2 객체의 멤버 메서드 호출 t2.inputNum(10, 20) } //내용이 없는 클래스 정의 class TestClass1 //멤버를 가지는 클래스 정의 class TestClass2{ //멤버 변수 var a1 = 0 var a2 = 0 //멤버 메서드 fun inputNum(num1:Int, num2 : Int){ a1 = num..
2023.05.11 1. Kotlin - JetBrains에서 만든 프로그래밍 언어 - 2017년 Google IO 행사에서 안드로이드 개발 공식 언어로 Kotlin을 지정해 Java를 대체할 언어로 주목받고 있다. - 코틀린 파일 확장자는 '.kt'로 코틀린 컴파일러가 파일을 컴파일하면 자바 바이트코드가 만들어지고, 이를 JVM이 실행한다. - 코틀린은 java와 달리 파일명과 클래스명을 다르게 작성해도 된다. - 간결한 코드 표현 - 널 안전성 지원 - 자바와의 상호 운용성 - 구조화 동시성 2. 주석 코틀린에서 사용하는 주석은 자바에서 사용하는 주석의 종류와 동일하다 fun main(){ // 한 줄 주석 /* 여러 줄 주석 */ /** */ } 원래 자바에서 주석을 사용하면 ..