목록전체 글 (164)
초보개발자 긍.응.성
OpenSSL Ciphers 에 대하여 이 글은 ssl cipher에 대한 이해가 부족하여 발생한 이슈 상황에 대하여 회고하는 글입니다. 상황 사내에서 nginx의 SSL 프로토콜 기준을 TLSv1.2 이상으로 지원해야 하는 일이 있었습니다. 모든 서비스에 공통으로 적용하도록 가이드가 내려왔기에, 이에 따라 기존 서비스들은 SSL 설정을 수정하였습니다. 가이드엔 SSL 프로토콜과 SSL Cipher 문자열의 수정이 있었는데요, 실질적으로 수정한 범위는 nginx의 ssl_protocols와 ssl_ciphers 를 수정해주면 되었습니다. 이 중 ssl_ciphers와 같은 경우 정보보호 강의 때 얼핏 들은 것으로 보이는 암호화 방식(AES, SHA…)으로 얽힌 복잡한 문자열 값을 설정해주어야 했었는데, ..
10장 애노테이션과 리플렉션 💡 다루는 내용 애노테이션 적용과 정의 리플렉션을 사용해 실행 시점에 객체 내부 관찰 코틀린 실전 프로젝트 예제 애노테이션(annotation) - 라이브러리가 요구하는 의미를 클래스에게 부여할 수 있다. 리플렉션(reflection) - 실행 시점에 컴파일러 내부 구조를 분석할 수 있다. 10.1 애노테이션 선언과 적용 10.1.1 애노테이션 적용 @Test fun testTrue() { Assert.assertTrue(true) } 코틀린도 자바와 같은 방법으로 애노테이션을 적용한다. data class Date(val millisSinceEpoch: Long) { private val interval = LocalDateTime.ofInstant(Instant.ofEpo..
9장 제네릭스 💡 다루는 내용 제네릭 함수와 클래스를 정의하는 방법 타입 소거와 실체화한 타입 파라미터 선언 지점과 사용 지점 변성 9.1 제네릭 타입 파라미터 9.1.1 제네릭 함수와 프로퍼티 val authors = listOf("Dmitry", "Svetlana") val readers: MutableList = mutableListOf() // val readers = mutableListOf() fun List.slice(indices: IntRange): List val List.penultimate: T get() = this[size - 2] println(listOf(1, 2, 3, 4).penultimate) 제네릭을 사용하면 타입 파라미터를 받는 타입을 정의할 수 있다. 안에 들어가는..
6장 코틀린 타입 시스템 💡 다루는 내용 널이 될 수 있는 타입과 널을 처리하는 구문의 문법 코틀린 원시 타입 소개와 자바 타입과 코틀린 원시 타입의 관계 코틀린 컬렉션 소개와 자바 컬렉션과 코틀린 컬렉션의 관계 6.1 널 가능성 널이 될 수 있는 타입 fun strLen(s: String) = s.length strLen(nullSt) // ERROR: Null can not be a value of a non-null type String fun strLenSafe(s: String?): Int = if (s != null) s.length() else 0 코틀린에서 타입을 그냥 명시하면 null이 될 수 없는 인자이다. 타입 이름 뒤에 물음표(?)를 붙여 널이 될 수 있는 타입을 명시한다. 널이 될..
5장 람다로 프로그래밍 💡 다루는 내용 람다 식과 멤버 참조 함수형 스타일로 컬렉션 다루기 시퀀스: 지연 컬렉션 연산 자바 함수형 인터페이스를 코틀린에서 사용 수신 객체 지정 람다 사용 5.1 람다 식과 멤버 참조 람다 소개: 코드 블록을 함수 인자로 넘기기 button.setOnClickListener { /* 클릭시 수행할 동작 */ } 람다 식의 문법 val sum = { x: Int, y: Int -> x + y } run { println(42) } 람다 식은 중괄호로 둘러싸여 있다. 식이기 때문에 변수에 저장할 수 있다. run 함수를 통해 인자로 받은 람다를 실행할 수 있다. 실행 시점에서 람다 호출에는 아무 부가 비용이 들지 않는다. data class Person(val name: Str..
4장 클래스, 객체, 인터페이스 💡 다루는 내용 클래스와 인터페이스 뻔하지 않은 생성자와 프로퍼티 데이터 클래스 클래스 위임 object 키워드 사용 4.1 클래스 계층 정의 코틀린 인터페이스 interface Clickable { fun click() // 일반 추상 메서드 fun showOff() = println("I'm clickable!") // 디폴트 메서드 } interface Focusable { fun setFocus(b: Boolean) = println("I ${if (b) "got" else "lost"} focus.") fun showOff() = println("I'm focusable!") } class Button: Clickable, Focusable { override f..