라벨이 kotlin인 게시물 표시

Kotlin 중첩 클래스

Kotlin 중첩 클래스 중첩 클래스 클래스안에 만드는 클래스를 중첩클래스라고 부른다. 중첩 클래스에서는 각 클래스의 정의한 멤버를 사용할 수 있는가를 숙지 해야 한다. Inner 클래스는 OuterClass의 멤버변수를 사용하기가 쉬워진다. class Outer1 { inner class Inner { } } Inner Class , Outer Class 내부클래스는 외부 클래스로 부터 생성된 객체를 통해서만 객체 생성이 가능하다. 외부클래스는 내부클래스의 멤버를 자유롭게 사용할 수 없지만, 내부 클래스는 외부 클래스의 멤버를 자유롭게 사용할 수 있다. fun main () { var obj2 = Inner1() // Error } class Outer1 { inner class Inner1 { } } Kotlin: Unresolved reference: Inner1 내부클래스를 직접적으로 객체를 생성할 수 없기때문에, 에러가 발생한다. fun main () { var obj1 = Outer1() var obj2 = obj1.Inner1() } class Outer1 { inner class Inner1 { } } 외부클래스의 객체를 먼저 생성한뒤, 내부 클래스의 객체를 생성 할 수 있다. fun main () { var obj1 = Outer1() var obj2 = obj1.Inner1() } class Outer1 { val outerMember1 = 100 fun outerMethod1 () { println ( "Outer Method" ) println(innerMember1) // Error innerMethod1() // Error } inner class Inner1 { val innerMember1 = 100 fun inner...

Kotlin Data Class

Kotlin Data Class DataClass는 매개체의 데이터를 관리하는 용도로 사용하느 클래스이다. abstract, open, sealed, inner 클래스로 정의할 수 없다. 반드시 주 생성자를 가지고 있어야 한다. DataClass 를 사용하면 몇가지 메소드를 기본적으로 추가해서 사용상의 용이하게 할 수 있다. Data Class의 메서드 equals : 객체가 가지고 있는 변수를 모두 비교하는 메서드 hashCode : 객체를 구분ㄴ하기 위한 고유한 정수값 copy : 객체를 복제하는 메서드 toString : 객체가 가지고 있는 변수의 값을 출력 componentN : 객체 분해  이러한 메서드들이 자동으로 오버라이딩되어서 추가된다. data class TestClass { } data class는 위와 같이 class 앞에 data를 붙여준다. data class는 무조건 주 생성자가 있어야 하므로 없으면 아래와 같은 에러가 발생한다. Kotlin: Data class must have at least one primary constructor parameter abstract data class TestClass2( var a1 :Int , var a2 :Int) { } open data class TestClass2( var a1 :Int , var a2 :Int) { } Kotlin: Modifier 'abstract' is incompatible with 'data' Kotlin: Modifier 'open' is incompatible with 'data' 또한, data class는 abstract, open 등의 추상크래스, 부모 클래스로 선언될 수 없다. Data Class 의 toString fun main () { var obj1 = TestClass1( 100 , 200 ) var obj2 = TestClass2( 100 , 200 ) ...

Kotlin this, super

Kotlin this, super this 객체 자기 자신을 지칭한다. 멤버 변수와 메서드 내부의 변수를 구분할 때 사용한다. 멤버 메서드와 메서드 내부의 메서드를 구분할 떄 사용한다. 생성자에서 다른 생성자를 호출할 때 사용한다. fun main () { val obj1 = TestClass1() obj1.testMethod1() } class TestClass1 { var a1 = 100 fun testMethod1 () { var a1 = 200 println ( "a1 : $ a1 " ) println ( "this.a1 : $this .a1" ) } } this는 객체 자신을 의미하기때문에, 클래스 자체의 멤버변수 100 을 출력한다. 코틀린에서는 메서드 안에 메서드를 만드는게 가능하다. fun main () { val obj1 = TestClass1() obj1.testMethod1() } class TestClass1 { var a1 = 100 fun testMethod1 () { fun testMethod2 () { println ( "testMethod1 내부의 testMothod1" ) } testMethod2() // 내부 함수 호출 this .testMethod2() // 클래스 멤버의 메서드 호출 } fun testMethod2 () { println ( "testMethod2" ) } }  근데, 누가 이렇게 쓸까, 동일클래스에서 클래스 멤버변수랑 메서드 내부 멤버변수의 이름을 동일하게 하거나, 클래스 멤버 메서드랑 내부 멤버 메서드 이름을 동일하게 할 경우는 없을 것으로 생각된다.  아마 정적검사툴이나 보안체크툴에서...

Kotlin 접근 제한

Kotlin 접근 제한자  객체가 가지고 있는 변수는 "." 연산자를 통해 자유롭게 접근이 가능하다.  접근 권한을 설정해 오동작하는 것을 사전에 막을 수 있게 한다.  Kotlin에서는 클래스의 정의한 모든 변수는 기본적으로 private 로 설정된다. 모든 변수는 직접적인 접근이 불가능하다.  따라서, getter를 통해서 접근할 수 있도록 한다.  Java 의 경우에는 . 을 통해서 접근 가능하다. Kotlin 에서는 . 이 자연스럽게 getter로 변환해서 접근한다. 클래스 접근 제한자 private : 외부에서 객체를 생성 할 수 없다. public : 외부에서 객체를 생성 할 수 있다. (기본) internal : 같은 모듈일 경우에만 객체를 생성할 수 있다. protected : 클래스에 지정할 수 없다. protected 는 클래스에 지정하면 아래와 같은 에러가 발생한다. Modifier 'protected' is not applicable inside 'file' private 클래스를 외부에서 참조할려면 아래와 같은 에러가 발생한다. Cannot access 'TestFile': it is private in file 변수, 메서드 접근 제한자 private : 외부에서 접근할 수 없다. public : 외부에서 접근이 자유롭다. (기본) internal : 모듈이 같을 경우에만 접근이 가능하다. protected : 상속 관계일 경우에만 접근이 가능하다. 개발자가 자유롭게 접근해서 값을 변경하는 것을 막기 위해서 프로그램의 오동작을 막기 위한 중요한 수단이다.

Kotlin 모듈

Kotlin 모듈  kt 파일들을 모아 관리하는 개념이 패키지라면, 모듈은 패키지를 모아 관리하는 개념이다.  패키지가 많아지면 관리하기가 어려워 질 수 있는데, 이 때 모듈로 묶어서 사용한다. 모듈  Java, Kotlin, Android 등의 분류로 모듈을 생성 할 수 있다.  Module 내에서 패키지를 생성할 수 있다. 모듈 사용 등록  File - Project Structure - Modules - Dependencies - Module Dependency

Kotlin 패키지

Kotlin 패키지 SW 개발을 하다보면은 클래스도 많이 만들게되고, KT 파일도 많이 만들게 된다. kotlin 에서 kt 파일을 폴더 별로 나누어 관리하는 개념을 패키지라고 한다. 패키지는 물리적인 폴더로 구분된다. 패키지  File -> New -> Package  실제로 컴퓨터에 물리적인 폴더로 생성된다. 그냥 폴더라고 생각해도 될 듯.  패키지 내에 있는 파일들은 상단에 패키지를 명시하여야 한다.  다른 패키지에서 해당 패키지에 있는 클래스를 명시하고자 할 때, 패키지 이름을 포함한 클래스의 이름을 명시해주어야 한다. Import  import를 사용해 패키지를 명시하면 코드 내에서 패키지 명을 생략할 수 있다.  자동 import 기능을 통해서 함수이름만 입력하면 자동으로 import 문구를 추가 할 수 있다.

Kotlin 생성자

Kotlin 생성자  Kotlin 생성자에 대해서 살펴보자. 생성자  클래스를 통해 객체를 생성할때, 자동으로 수행될 코드를 작성하는 곳  반환 타입이 없어서 메서드라고 하지 않는다.  생성자는 클래스 멤버변수의 값을 초기화 하고 싶을 때 사용한다. init 코드 블록  객체가 생성되면 자동으로 동작하는 부분. Constructor   Constructor 키워드를 이용해서 생성자를 만들수 있다.  Java 에서의 생성자는 class 이름과 동일한 이름으로 생성자를 대체했는데, Kotlin 에서는 Constructor 라는 키워드를 통해서 사용한다. 기본 생성자  클래서를 정의할 때, 클래스 이름 우측에 인자를 둬서 사용 가능하다.  constructor 를 키워드를 생략할 수 도 있다.

Kotlin 객체지향프로그래밍

Kotlin 객체지향프로그래밍  Kotlin 에서의 객체지향프로그래밍에 대해서 알아보자. 객체지향프로그래밍 Kotlin 은 기본적으로 객체지향프로그래밍이지만, 굳이 객체를 사용하지 않아도 된다. Java 처럼 Class 가 무조건 있어야 하는것은 아니다. class 변수 선언시에 "new" 지정자를 생략해도 된다. 겉보기엔 일반 변수 처럼 사용할 수 있다.  class 의 멤버변수를 설정하면 내부적으로 set, get 메소드가 자동 생성된다. class 에서 함수는 함수라고 부르지 않고, 멤버 메서드라고 한다. 객체는 클래스를 통해서 생성할 수 있다. 객체가 다 수 필요하다면 같은 클래스로 객체를 무수히 만들어서 사용하면 된다.

Kotlin When

Kotlin when  when 은 Java 에서의 switch case 와 비슷하다. 하지만, 수식이나 값의 결과에 따라 수행될 부분을 결정하게 되며, 자바와 다르게 정수 뿐만 아니라, 타입의 값을 비교할 수 있다. when val a1 = 1 when (a1) { 1 -> println ( "a1 은 1 입니다 ." ) 2 -> println ( "a1 은 2 입니다 ." ) 3 -> println ( "a1 은 3 입니다 ." ) } 여러 줄 일 경우 {} 으로 묶어 준다. val a1 = 1 when (a1) { 1 -> println ( "a1 은 1 입니다 ." ) 2 -> { println ( " 여러 줄 일 경우 " ) println ( "a1 은 2 입니다 ." ) } 3 -> println ( "a1 은 3 입니다 ." ) } 조건이 모두 아닐때는 else 를 사용한다. val a1 = 1 when (a1) { 1 -> println ( "a1 은 1 입니다 ." ) 2 -> { println ( " 여러 줄 일 경우 " ) println ( "a1 은 2 입니다 ." ) } 3 -> println ( "a1 은 3 입니다 ." ) else -> println ( "a1 은 1,2,3 이 아닙니다 ." ) }  조건이 여러개일 경우에 or 연산으로 "," 를 사용한다. val a1 = 3 when (a1) { 1 , 2 -> println ( "a1 은 1 이거나 , 2 입니...

Kotlin 시작하기 : Intellij IDEA설치

Kotlin 시작하기 - Intellij IDEA 설치 JDK 최신 버전 설치  Kotlin을 시작하기 위해서는 JDK 가 필요하다. 오라클 계정이 필요하며, JDK 를 설치해보자. JAVA 6 이상 버젼이 필요하다.  현재 설치된 Java 버젼을 확인해보자.  cmd > java -version  java version "1.8.0_261" Java(TM) SE Runtime Environment (build 1.8.0_261-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode) 툴 설치 (JetBrain - Intellij IDEA)  - JetBrain : Intellij IDEA : 학습에서만 무료, 서비스 개발에서는 유료  - Android Studio  : 안드로이드 앱 무료 JetBrain - Intellij IDEA  다운로드 : https://www.jetbrains.com/idea/download/#section=windows Intellij IDEA 설치

Kotlin 언어 소개

Kotlin 언어 소개 Java 대체 언어로 많은 주목을 받고 있다. 2017년 Google IO 행사에서 안드로이드 개발 공식 언어로 Kotlin 을 소개하였습니다. 구글에서 "GO" 언어를 만들어서 채택할려고 했으나, Java 의 쓰임새와 너무 달라서 Kotlin 으로 대체하였습니다. http://kotlinlang.org Kotlin 동작 원리 Kotlin 언어는 개발자를 위한 코드입니다. Java 는 JVM 위한 코드이고, C 는 실행을 위한 Binary Code를 위한것이였는데, Kotlin 은 개발자의 편의성을 위한 부분이 강조 되었다. Kotlin 은 컴파일 시점에서 Java , C , JavaScript 로 변환되어진다. 개발자는 어떤 프로젝트를 선택함에 따라서 코드의 결과물이 달라진다. 현재는 안드로이드 개발에서 Java 를 대신해서 사용하고 있다. Kotlin 언어 특징 Java 언어와 비교하여 매우 간단한 문법을 제공한다. NULL 안정성을 위해서 Null Point Exception 이 발생하지 않는다. 예외처리 ( Try - Catch ) 등을 강제하지 않는다. 객체지향, 함수형 프로그래밍 방식 모두 가능하다. Kotlin 개발 분야 Kotlin for Server Side Kotlin for Android Kotlin for JavaScript Kotlin for Native Kotlin for Data Science