분류 전체보기
-
자바 접근 제어자안드로이드 학습/자바 2024. 1. 4. 10:48
제어자란(modifier)? 제어자란 클래스와 맴버의 선언 시부가적인 의미를 부여하는 키워드를 의미합니다. 접근 제어자(access modifier) - 1개만 사용 가능 기타 제어자 - 2개 이상 조합해서 사용 가능 접근 제어자란? 자바에서는 정보 은닉을 위해 접근 제어자라는 기능을 제공하고 있습니다. 접근 제어자에 따라 클래스 외부에서 접근을 막을 수도 허용할 수도 있습니다. private: 같은 클래스 내에서만 접근 가능합니다. default: 같은 패키지 내에서만 접근할 수 있습니다. protected: 같은 패키지 내의 클래스나 다른 패키지의 상속 관계에 있는 하위 클래스에서 접근할 수 있습니다. 그 외에 다른 패키지에서 접근이 제한됩니다. public: 가장 넓은 범위의 접근 제어자로, 어떤 ..
-
[코틀린 완벽 가이드] 5.1 코틀린을 활용한 함수형 프로그래밍코틀린 공부/코틀린 2024. 1. 3. 08:14
차례 : 5.1.1 고차함수 5.1.2 함수 타입 5.1.3 람다와 익명 함수 함수형 프로그래밍은 프로그램 코드를 불변 값을 반환하는 함수의 합성으로 구성할 수 있다는 아이디어를 바탕으로 한다. 함수형 언어는 함수를 일급 시민(first class) 값으로 취급한다. 이 말은 함수를 다른 일반적인 타입의 값과 똑같이 취급한다는 뜻이다. 특히 일급 시민이라는 말에는 변수에 값을 대입하거나 변수에서 값을 읽을 수 있고 함수에 값을 전달하거나 함수가 값을 반환할 수 있다는 뜻이 들어있다. 이런 성질은 함수인 값을 데이터와 마찬가지로 조작할 수 있는 고차 함수라는 함수를 정의할 수 있게 해주며, 코드 추상화와 합성(Composition)이 더 쉽게 가능한 유연성을 제공해준다. 5.1.1 고차함수 앞에서 이미 람..
-
[코틀린 완벽 가이드] 4장 클래스와 객체 다루기 (4.4 객체)코틀린 공부/코틀린 2023. 12. 30. 22:27
4.4 객체 코틀린에서 객체 선언은 클래스와 상수를 합한 것이며 객체 선언을 통해 싱글턴, 즉 인스턴스가 단 하나만 존재하는 클래스를 만들 수 있다. 그리고 자바 익명 클래스와 비슷한 역할을 하는 객체 식도 살펴본다. 4.4.1 객체 선언 코틀린은 어떤 클래스에 인스턴스가 오직 하나만 존재하게 보장하는 싱글턴 패턴을 내장하고 있다. 코틀린에서는 클래스와 비슷한 방법으로 싱글턴을 선언한다. 다만 class 대신 object라는 키워드를 사용한다. object Application { val name = "My Application" override fun toString() = name fun exit() {} } 이런 객체 선언은 클래스를 정의하는 동시에 클래스의 인스턴스를 정의하는 것이기도 하다. fu..
-
[코틀린 완벽 가이드] 4장 클래스와 객체 다루기 (4.3 단순한 변수 이상 인 프로퍼티)코틀린 공부/코틀린 2023. 12. 30. 13:13
4.3 단순한 변수 이상 인 프로퍼티 4.3.1 최상위 프로퍼티 클래스나 함수와 마찬가지로 최상위 수준의 프로퍼티를 정의할 수 도 있다. 이런 경우 프로퍼티는 전역 변수나 상수와 비슷한 역할을 한다. val prefix = "Hello, " // 최상위 불변 프로퍼티 fun main(){ val name = readLine() ?: return println("$prefix$name") } 이런 프로퍼티에 최상위 가시성(public / internal / private)을 지정할 수 있다. 4.3.2 늦은 초기화 클래스를 인스턴스화할 때 프로퍼티를 초기화해야 한다는 요구 사항이 불필요하게 엄격할 때가 있었다. 그러나 어떤 프로퍼티는 클래스 인스턴스가 생성된 뒤에, 그리고 사용되는 시점보다 이전에 초기화되..
-
[코틀린 완벽 가이드] 4장 클래스와 객체 다루기 (4.2 널 가능성)코틀린 공부/코틀린 2023. 12. 29. 17:31
4.2 널 가능성 자바와 마찬가지로 코틀린은 참조 값에는 아무것도 참조하지 않는 경우를 나타내는 특별한 null이라는 값이 있다. 자바에서는 모든 참조 타입의 변수에 null을 대입할 수 있지만, 이때 이 참조 타입에 정의된 메서드나 프로퍼티를 사용하려면 NPE(NullPointerException)이 발생한다. 이 오류가 최악인 이유는 컴파일러가 정적인 타입 정보만으로는 이런 오류를 잡아낼 수 없어서 런타임에 프로그램을 실행해봐야 이 오류를찾을 수 있기 떄문이다. 코틀린 타입 시스템에는 null 값이 될 수 있는 참조 타입과 없는 타입을 확실하게 구분해주는 큰 장점이 있다. 이 기능은 null 발생 여부를 컴파일 시점으로 옮겨주기 때문에 악명 높은 NullPointerException 예외를 상당 부분..
-
[코틀린 완벽 가이드] 4장 클래스와 객체 다루기 (4.1 클래스 정의하기)코틀린 공부/코틀린 2023. 12. 29. 16:27
4.1 클래스 정의하기 기본적으로 클래스 선언은 참조 타입(referential type)을 정의한다. 즉, 이런 참조 타입의 값은 특정 클래스 인스턴스의 실제 데이터 위치를 가르키는 참조다 4.1.1 클래스 내부 구조 class Person { var firstName: String = "" var familyName: String = "" var age: Int = 0 fun fullName() = "$firstName $familyName" fun showMe() { println("${fullName()} : $age") } } 이 정의는 모든 Person 클래스의 인스턴스마다 firstName, familyName, age라는 프로퍼티와 fullName() 및 showMe()라는 두 함수가 들어..
-
[코틀린 완벽 가이드] 3장 함수 정의하기 (3.5 예외 처리)코틀린 공부/코틀린 2023. 12. 29. 13:13
3.5 예외 처리 3.5.1 예외 던지기 오류 조건을 신호로 보내려면 fun parseIntNumber(s: String):Int { val num = 0 if(s.length !in (1..31)) throw NumberFormatException("Not a number: $s") for(c in s){ if(c !in '0'..'1') throw NumberFormatException("Not a number: $s") } return num } 3.5.2 try 문으로 예외 처리하기 fun readInt(default: Int): Int{ return try{ readln().toInt() }catch (e: NumberFormatException){ default } } 자바 7부터는 catch..
-
[코틀린 완벽 가이드] 3장 함수 정의하기 (3.3 조건문와 3.4 루프)코틀린 공부/코틀린 2023. 12. 29. 11:51
3.3 조건문 3.3.1 if 문으로 선택하기 (자바랑 비슷해서 일부 생략) 자바와 코틀린의 차이점은 if를 식으로 사용할 수 있다는 것이다. fun max(a: Int, b: Int) = if(a > b) a else b 한쪽만 블록이 있을 수도 있다. 단, if else 둘다 있어야 한다. val result = if(i > 0){ println("i is bigger than 0") }else println("i is smaller than 0") 코틀린은 자바가 가지고 있는 3항 연산자 (조건 ? A : B) 가 없다. 이 부분이 그것을 상쇄해준다. 3.3.2 범위, 진행, 연산 코틀린은 순서가 정해진 값 사이의 수열(interval)을 표현하는 몇가지 타입을 제공한다. 코틀린에서는 이런 타입을 ..
-
[코틀린 완벽 가이드] 3장 함수 정의하기 (3.1 함수)코틀린 공부/코틀린 2023. 12. 28. 10:32
여기서는 함수의 기본적인 내부 구조를 살펴보고 인자(named argument), 디폴트(default) 값, vararg 스타일 함수 등을 살펴본다. 그리고 코틀린 언어의 명령형(imperative) 제어 구조도 다룬다. 배우는 내용 : 코틀린 함수의 구조 제어 구조 : 조건문, 루프, 오류 처리 3.1 함수 3.1.1 코틀린 함수의 구조 반지름이 주어졌을 때 원의 넓이를 계산하는 함수를 정의 fun circleArea(radius: Double) : Double{ return PI*radius*radius } fun main() { println(circleArea(3.0)) // 28.274333882308138 } fun 함수 이름(함수에서 사용할 파라미터) : return 값{ 함수가 할 내용 ..
-
[코틀린 완벽 가이드] 2장 코틀린 언어 기초 (2.3 - 2.4)코틀린 공부/코틀린 2023. 12. 27. 15:33
2.3 문자열 2.3.1 문자열 템플릿 val hello = "Hello, world!" 코틀린은 여러 가지 식에서 문자열을 합성해내는 훨씬 더 강력한 방법을 지원한다. println("$hello, Today is ${Date()}") 결과 : Hello, world!, Today is Wed Dec 27 15:24:31 KST 2023 ${}의 중괄호 사이에 넣기만하면, 어떤 올바른 코틀린 식이든 문자열에 넣을 수 있다. 이런 기능을 문자열 템플릿이라고 한다. 또 다른 문자열 유형으로 로우 문자열(raw string)이 있다. 로우 문자열을 사용하면 이스케이프 시퀀스를 사용하지 않고도 문자열 작성이 가능하다. val message = """ $hello, Today is ${Date()} """.tr..