728x90 반응형 개발 56 [Effective Kotlin] Item 38: Use function types or functional interfaces to pass operations and actions Summary 행동을 나타내기 위해, 표준 인터페이스나 추상 클래스 대신 함수 타입이나 함수형 인터페이스를 선호합시다. 함수 타입이 좀 더 자주 사용 됩니다. 여러 번 사용되거나 타입이 길어지면 type alias를 사용합시다. 함수형 인터페이스는 주로 Java 상호 운용성을 위해 선호되며, 표현하려는 것이 임의의 함수 이상으로 복잡한 경우에 선호됩니다. (요약만 봐서는 사실 잘 이해가 안된다 살펴보자!) Intro 많은 언어에는 fuction type이라는 개념이 없습니다. 대신 하나의 메소드를 갖는 interface를 사용합니다. 이런 인터페이스를 SAM(Single-Abstract Method)이라고 합니다. 아래 예시는 view를 클릭할 때 발생해야 하는 정보를 전달하는데 사용되는 SAM의 예입니.. 2021. 10. 7. [Effective Kotlin] Item 31: Define contract with documentation Intro 문서로 약속을 정의해라. Item 27: Use abstraction to protect code against change 에서 나왔던 '메세지를 보여주는 함수'에 대해서 다시 보겠습니다. fun Context.showMessage( message: String, length: MessageLengh = MessageLength.LONG ) { val toastLength = when(length) { SHORT -> Toast.LENGTH_SHORT LONG -> Toast.LENGTH_LONG } Toast.makeText(this, message, toastLength).show() } enum class MessageLength { SHORT, LONG } 위 코드는 어떻게 메세지를 .. 2021. 9. 11. [Effective Kotlin] Item 24: Consider variance for generic types Intro 아래의 generic class를 보면, 타입 파라미터인 T는 out이나 in과 같은 제네릭 변성 한정자(generic variance modifier)가 없기 때문에 타입 변경이 불가능합니다(invariant). 이 말은 generic class에 의해 생성된 서로 다른 타입 사이에는 관계가 없다는 것을 의미하는데요. class Cup fun main() { val anys: Cup = Cup() //Error: Type mismatch val nothings: Cup = Cup() //Error } 예를 들면, Cup와 Cup, Cup와 Cup사이에는 관계가 없습니다. 만약, 관계가 필요하다면 out이나 in과 같은 제네릭 한정자를 사용해야 합니다. out은 type parameter를 공.. 2021. 9. 9. Cloud Native와 CNCF Cloud Native Landscape Intro 예전에 CNCF 재단에서 권장하는 Cloude Native 환경을 만들기 위한 landscape에 대해 살펴본 적이 있습니다. 주기적으로 업데이트를 하는 자료이기도 하고, 클라우드 기반의 어플리케이션을 구축하기 위해 어떤 제품을 선택해서 조합하여 사용할 수 있을지도 한눈에 파악할 수 있어 가끔 살펴보곤 했습니다. 오늘은 이 Cloud Native, CNCF재단, Cloud Native Trail Map와 함께, Landscape에서 확인할 수 있는 몇가지 대표적인 소프트웨어에 대해서 소개하고자 합니다. Cloud Native (클라우드 네이티브) 가상화 기술이 발전하고 Cloud 환경의 발전이 가속화됨에 따라 애플리케이션의 구성 역시 Cloud 환경에 맞게 설계되어야 할 필요성을 갖게됩니다. .. 2021. 9. 6. [Effective Kotlin] Item 17: Consider naming arguments Intro val text = (1..10).joinToString("|") 위와 같은 예시가 있을 때, joinToString에 대해서 모른다면 "|"이 seperator라는 것을 알기 어렵고, 명확하지 않습니다. (물론 요즘은 IntelliJ와 같은 IDE가 잘알려주지만,,, 그래도!) 가장 좋은 방법은 naming argument를 사용하는 것 입니다. 아래처럼요! val text = (1..10).joinToString(separator = "|") 비슷한 방법으로 naming variable이 있습니다. val separator = "|" val text = (1..10).joinToString(separator) 위의 경우, naming argument보다는 좀 덜 안정적입니다. 변수 명은 개.. 2021. 8. 25. 쿠키(Cookie) vs 세션(Session) 쿠키와 세션을 사용하는 이유: HTTP 프로토콜의 약점(비연결지향, 상태정보유지안함)을 보완하기 위해 사용 쿠키 (Cookie) 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일 프로세스 브라우저에서 웹페이지로 접속 클라이언트가 요청한 웹 페이지를 받으면서 쿠키를 클라이언트 로컬에 저장 클라이언트가 재 요청시 웹 페이지 요청과 함께 쿠키값도 전송 지속적으로 로그인 정보를 가지고 있는 것처럼 사용 Session(세션) 일정 시간동안 같은 브라우저로부터 들어오는 일련의 요구를 하나의 상태로 보고 유지하는 기술 프로세스 클라이언트가 서버에 접속시 세션ID발급 서버에서는 클라이언트로 발급해준 세션ID를 쿠키를 사용해 저장 클라이언트는 다시 접속할 때, 이 쿠키를 이용해 세션 ID값을 서버에 전달 .. 2021. 8. 21. 이전 1 2 3 4 5 6 7 ··· 10 다음 728x90 반응형