본문 바로가기
반응형

분류 전체보기154

[Kotlin] 코틀린 object/Companion Object(동반 객체)/Anonymous Object(무명 객체) 객체 선언(Object Declaration) - 싱글 톤(Singleton)만들기객체 선언은 클래스를 정의하고 클래스의 인스턴스를 만들어서 변수에 저장하는 모든 작업을 단 한문장으로 처리합니다. 단, 생성자는 객체 선언에 쓸 수 없다 → 생성자 호출없이 즉시 인스턴스 생성(ex) object NoConstructor(val id : Int) { /**/ } → 안됨.)data class Product(val id : Int, val name :String, val price : Int)object ProductRepo { private val products = mutableListOf() fun addProduct(product: Product){ products.add(pro.. 2024. 5. 8.
[Kotlin] 클래스 위임 : by / 일급 객체 / 데코레이터, 위임 패턴 대규모 객체지향 시스템을 설계할 때 시스템을 취약하게 만드는 문제는 보통 구현 상속에 의해 발생합니다. 하위 클래스가 상위클래스의 일부를 오버라이드하면서 세부 구현사항에 의존하게 되고 계속 개발을 하게 되면 상위 클래스의 구현이 바뀌거나 상위 클래스에 새로운 메서드가 추가 되는 문제가 발생합니다. 이를 바탕으로 코틀린은 자바와달리 기본적으로 클래스를 final로 취급하여 상속을 염두에 두어 open 변경자로 클래스를 확장한다. 상속을 허용하지 않는 클래스에 새로운 동작을 추가해야 할 때가 있는데 이를 사용하는 일반적인 방법은 데코레이터(Decorator)패턴과 객체의 동작을 다른 객체에게 위임하는 메터니즘인 위임(Delegate Pattern)패턴 이다.데코레이터(Decorator) 패턴객체의 동작을 확.. 2024. 5. 7.
[Kotlin] data class vs class (toString, equals, hashCode, copy) 자바 플랫폼에서는 클래스가 equals, hashCode, toString등의 메서드를 구현해야 합니다.코틀린에서는 이런 매서드를 기계적으로 생성하는 작업을 보이지 않는 곳에서 해주게 된다.따라서 필수 메서드로 인한 더러움(?) 없이 소스코드를 깔끔하게 유지할 수 있다. 자동 메서드를 구현 → 보일러 플레이트 감소! 문자열 표현 : toString()기본 제공되는 문자열 표현은 Client@aejvn123 같은 방식에서 기본 구현을 바꾸려면 toString 메서드를 오버라이드 해아하며 다음과 같이 구현된다.class Client(val name : String, val code : Int){ override fun toString(): String { return "Clent(name .. 2024. 5. 4.
[Kotlin] 코틀린 Sealed class ,Interface Sealed Class : 클래스 계층 정의 시 계층 확장 제한추상 클래스의 하나로써 자식 클래스의 종류를 제한하는 특성을 가지고 있음 interface Exprclass Num(val value: Int) : Exprclass Sum(val left: Int, val right: Int) : Exprfun eval(e: Expr): Int = when (e) { is Num -> e.value is Sum -> e.left + e.right else -> throw IllegalArgumentException("Unknown Expression")}위의 보게 되면 when식에서 EXPR의 모든 하위 클래스를 처리하는데 else 분기를 반드시 넣어줘야한다. 디폴트 분기인 else분기를 강.. 2024. 5. 3.
[Kotlin] Inner, nested class 내부 중첩 클래스(+ Recyclerview 리사이블러뷰) 코틀린은 기본적으로 중첩 클래스 (자바는 Inner)코틀린의 중첨클래스는 명시적으로 요청하지 않는 한 outer Class Insance에 대한 접근 권한이 없다는 점.  View요소를 하나 만들때 View의 상태를 직렬화 하기 위해 State 인터페이스를 선언하고 Serializable을 구현하며, View 인터페이스안에는 뷰의 상태를 가저와 저장할 때 사용할 getCurrentState 와 restoreState메서드 선언이 있다.interface State : Serializableinterface View { fun getCurrentState() : State fun restoreState(state : State) {}}우리가 자바에서는 클래스 안에 정의한 클래스는 자동적으로 내부 .. 2024. 5. 3.
[Kotlin 상속제어 변경자] open, final, abstract, override 상속을 위한 설꼐와 문서를 갖추거나, 그럴 수 없다면 상속을 금지한다.이는 하위 클래스에서 오버라이드하게 의도된 클래스와 메서드가 아니라면 모두 final로 만들라는 뜻이다.*final : 클래스, 메서드 또는 프로퍼티에 사용되어 재정의를 금지하는 역할 open어떤 클래스의 상속을 허용하려면 클래스 앞에 open 변경자를 붙여야 한다.메서드,프로퍼티도 오버라디으를 허용하고 싶다면 마찬가지고 open 변경자를 붙여야 한다.interface Clickable{ fun click() fun showOff() = println("clickable Test")}open class RichButton : Clickable { fun disable() {} open fun animate(.. 2024. 5. 2.
[Kotlin local function] 코틀린 로컬함수와 확장 코틀린 로컬함수함수에서 추출한 함수를 원 함수 내부에 중첩 시켜 코드를 깔끔하게 조직할 수 있음 왜 사용하지?정보 제거의 중요성 DRY(Don’t Repeat Yourself) 원칙을 지키기 위해! 로컬함수 예시다른 함수 내부의 정의된 함수를 의미하며 즉, 함수안에 다른 함수를 선언fun calRectArea(length: Int, width: Int): Int { fun multiply(a: Int, b: Int): Int { return a * b } return multiply(length, width)} 위와 같이 함수 안에 다른 함수를 선언하는 것을 말한다. (역시 백문이불여일견) 그럼 로컬함수를 통해 코드중복을 제거하는 예시를 보자1. 코드 중복data class .. 2024. 5. 2.
[Kotlin Dispatch] 동적, 정적 디스패치 (Dynamic, Static Dispatch) 디스패치(Dispatch) : 프로그램이 어떤 메소드를 호출할 것인가를 결정하여 그것을 실행하는 과정을 말함동적 디스패치(Dynamic dispatch) : 실행 시점에 객체 타입에 따라 동적으로 호출될 대상 메서드를 결정하는 방식정적 디스패치(Static Dispatch) : 컴파일 시점에 알려진 변수 타입에 따라 정해진 메서드를 호출하는 방식  정적 디스패치(static dispatch):컴파일 시점에 알려진 변수 타입에 따라 정해진 메서드를 호출하는 방식인 디스패치주로 오버로딩에서 발생하며 컴파일러는 함수 호출시 전달되는 인자의 타입과 개수를 기반으로 적절한 함수를 선택하게 된다.아래의 add 예시를 보게 되면 이해가 편하다.fun add(a: Int, b: Int): Int { return .. 2024. 5. 2.
[Android Kotlin] 네이버 지도 마커 대량 정보에 대한 최적의 카메라 위치 선정 (+클라이언트 처리 이유) 앞선 글에서 네이버 지도에서 마커를 찍을 때 카메라 이동에 대한 로직을 처리한 글을 보셨을겁니다. https://bendeng-life.tistory.com/153 [Android Kotlin] 안드로이드 네이버 지도SDK 사용자 경험 개선 하기 (카메라 이동, 마커찍기)네이버 지도에 마커들을 찍는 과정에 대해서 사용자 경험을 개선하기 위해 계속 발전시킨 과정에 대하여 정리하였습니다. 마커들을 찍는 과정의 발전 순서의 가장 큰 핵심은 zoom Level고정 값 →bendeng-life.tistory.com 그럼 여기서 드는 의문이 하나 왜 서버에서 로직을 처리하지 않고 클라이언트에서 처리를 할까? 라는 의문이 들으실 수 있다고 생각합니다. 우리에게는 굉장히 많은 상황이 존재합니다.편의를 위해 (예시로 내.. 2024. 1. 5.
[Android Kotlin] 안드로이드 네이버 지도SDK 사용자 경험 개선 하기 (카메라 이동, 마커찍기) 네이버 지도에 마커들을 찍는 과정에 대해서 사용자 경험을 개선하기 위해  계속 발전시킨 과정에 대하여 정리하였습니다.  마커들을 찍는 과정의 발전 순서의 가장 큰 핵심은 zoom Level고정 값 → LatLng Bounds → zoom Level 유동적인 사용순서로 생각을 해보면서 진행하였으며 사용자 경험을 고려하여 발전 시켰습니다.사용자 경험을 위한 진행 과정zoom Level 고정적 사용마커간의 평균을 계산하여 중간점으로 이동 진행현재 카메라의 위치를 기준으로 가장 가까운 곳으로 이동LatLng Bounds 사용LatLng Bounds를 측정하여 zoom 대신 camera Bounds 사용zoom Level 고정적 사용X현재 카메라를 위치를 고려하여 밀집도와 거리를 계산하여 이동최종 본1-1. 마커.. 2024. 1. 3.
[Android Kotlin] 의존성 주입 Hilt, koin 의존성 주입이란?안드로이드에서 의존성 주입은 객체 지향 프로그래밍에서 사용되는 소프트웨어 디자인 패턴 중 하나 입니다.의존성 주입은 객체가 다른 필요로 하는 객체에 대하여 직접 생성하는 것이 아닌 외부에서 주입을 받게 되는 패턴 입니다.의존성 주입은 주로 세 가지 방식으로 이루어집니다.생성자 주입: 의존성을 객체의 생성자를 통해 주입하는 방식입니다.메서드 주입의존성을 메서드의 매개변수를 통해 주입하는 방식입니다.속성 주입: 의존성을 객체의 프로퍼티나 세터 메서드를 통해 주입하는 방식입니다.의존성 주입을 통해 객체는 직접적으로 자신이 필요로 하는 의존성을 생성하지 않고 외부에서 주입받아 사용합니다.이를 통해 결합도를 낮추고, 유연하고 테스트 가능한 코드를 작성할 수 있습니다.Hilt란 무엇인가?Hilt는 .. 2024. 1. 3.
[Android kotlin] 안드로이드 Flow vs LiveData ViewModel 관리 : Flow vs LiveData LiveDataLifeCycle 인식을 통한 Observer 패턴LiveData는 안드로이드의 라이프사이클을 인식하므로 관련된 구성요소가 활성 상태일때만 데이터가 업데이트 되므로 메모리 누수나 비정상적인 UI 갱신을 방지하는데 도움이 된다데이터가 변경될 때마다 등록된 Observer에게 알림을 보내 UI갱신을 하는 패턴 사용.1. UI와 데이터 상태의 일치 보장2. 메모리 누수 없음3. 중지된 활동으로 인한 비정상 종료 없음4. 수명 주기를 더 이상 수동으로 처리하지 않음5. 최신 데이터 유지6. 적절한 구성 변경 : 기기 회전 혹은 다시 액티비티나 프래그먼트가 생성되면 최신 데이터를 받아옴 7. 리소스 공유Flow코루틴에서 Flow는 단일값을 반.. 2024. 1. 2.
반응형