본문 바로가기
반응형

전체 글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.
[Android kotlin] 네트워크 메니저로 사용자 경험 개선하기 (Connectivity Manager) 네트워크 설정 공식 레퍼런스https://developer.android.com/training/basics/network-ops/reading-network-state?hl=ko 네트워크 상태 읽기  |  Connectivity  |  Android Developers네트워크 상태 읽기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android에서는 앱이 연결의 동적 변경사항을 학습할 수 있습니다. 다음 클래스를 사용하여developer.android.com 우리는 앱을 사용하다 보면 네트워크의 연결에 대한 알림을 주는 것을 많이 볼 수 있다. 네트워크 연결 상태를 관리하고 모니터링하여보다 사용자에게 편리함을 제공해주고자 이 부분에 대해서 공략을 해보고자 하였습니다. .. 2024. 1. 2.
[프로그래머스] 택배상자 c++ (풀이,코드) 문제링크 https://school.programmers.co.kr/learn/courses/30/lessons/131704 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 코드, 풀이 아래의 주석을 보시면 바로 이해가 되실겁니다. 처음 문제에서 요구하는것과 반대로 생각을 했습니다. 4,3,1,2,5가 결국 order[i]의 값이 1,2,3,4,5순서대로 보조컨베이어벨트를 활용해서 최대 갯수를 구하는줄 알았는데 그것이 아닌 인덱스 +1 번째로 트럭에 실어야 한다는 것이었습니다. (문제 잘 읽자.) /* 1~n번 상자 / 한방향 / 보조컨베이어 -> L.. 2023. 9. 8.
[네이버 부스트캠프 웹 모바일 8기] 챌린지 수료 후기, 맴버십(본과정)합격 후기 이번 7월 중순부터 8월 초까지 4주라는 엄청나게 짧은 기간이 지나갔습니다. 한달동안 잠도 줄여가며 헬스를 포기해가며 눈을 뜨고 감을때까지 계속 챌린지 기간에 굉장히 집중을 했었던것 같습니다. 그리고 끝이 난 후 후기를 쓸까도 생각을 했지만 맴버십 과정이 떨어지던 붙던 결과가 나온 후에 적어보면서 회고를 하는 것이 좋다고 생각하여 이제야 적네요 하핳.. 혹시라도 챌린지 과정 지원이나 코딩 테스트 진행 관련 글은 아래를 참조하시면 되겠습니다😀 https://bendeng-life.tistory.com/138 네이버 부스트캠프 안드로이드 지원 합격 후기 안녕하세요 말린밴댕이 입니다. 이번에 소프트웨어 교육 프로그램(캠프)인 네이버 부스트캠프에 합격하게 되어 지원절차, 그리고 어떻게 합격하였는지에 대해서 간략.. 2023. 8. 18.
Virtual Box(ubuntu,linux 우분투/리눅스) 윈도우 다운,설치 과정 1. 윈도우 검색하기에 기능 켜기 /끄기를 검색하여 실행 후윈도우에서 가상머신(Linux)를 사용해주기 위해 두가지를 체크해준다2. 이제 재부팅을 시작한다.https://www.virtualbox.org/wiki/Downloads → 윈도우 버전을 다운로드 진행 하면 됩니다. 다 다음다음 누르면서 다운을 완료하면이런 창이 뜨면 이제 새로만들기를 클릭한다.이름과 종류는 linux 버전은 아까 다운로드 받은 ubuntu 20.04이상 버전 권장*화면에는 20.10이지만 향후에 22.04로 바꿨습니다.기본 메모리는 1024배수 MB로 해주는것이 좋다고 합니다.용량은 기본 25.00GB가 권장이긴 한데 20.00으로 설정하였습니다. (여유가 되시면 높게 설정하시는 것을 권장합니다!) 가상 메모리라 꼭 실제 메모.. 2023. 7. 16.
[프로그래머스 완주하지 못한 참가자] c++ (풀이,코드) 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/42576 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 코드, 풀이 풀이 1 완주자에서 참여자를 뺀 나머지 결국 완주를 못한 사람은 제한사항을 따른 한명뿐이다. 생각을 해보니 그냥 completion에 대해서 먼저 map을 추가하고 키값이 false라면 그걸 리턴하면 되지 않을까? 근데 세번째 예시와 제한사항에 중첩이 있을 수 있다니 int로 선언하고 ++을 해준다. -> 0이라면 return해준다. #include #include #.. 2023. 7. 9.
네이버 부스트캠프 웹,모바일 8기 합격 선물(온보딩키트) 언박싱 부스트캠프 합격 결과를 확인하고 등록과정을 거치는데 합격 선물을 주소지를 입력하면 보내준다고 해서 적고 기대가 되었습니다. 6기는 간식 위주 7기는 슬리퍼를 받았다는데 오픈채팅방에서는 이번 여름에 도움이 될것 같다는 말이 있었다. 밖에 있어서 도착은 점심에 도착했지만 늦게나마 와서 확인을 하였습니다. 오 뭔가 박스도 대기업은 다르다는건가..! 무언가 굉장히 바리바리 들어있어서 굉장히 기대가 되었습니다. 부스트캠프에 대한 모티브가 적힌 종이 몇장도 들어있고 뭔가 많이 들어있는게 대기업은 대기업인가.. 라는 생각도 들었습니다😁 우산, 손풍기, 각종 스티커들과 챌린지과정을 할동안 쓸 날짜가 적힌 노트와 네이버 커넥트 노트(2권) 등등이 들어있었습니다. (42서울 입과선물이랑은 차원이 다르구만..?) 앞으로 있.. 2023. 7. 7.
[42seoul Philosopher] 42서울 philosopher과제 개념 정리 42서울에서 전에 진행했던 필로소퍼에 대한 개념 정리입니다. 조금은 공부를 했는데 혹시라도 필요하신 분이 있지 않을까 해서 도움이 되고자 공부했던 것을 올려보도록 하겠습니다 😁 2023. 7. 6.
크루스칼 알고리즘(kruskal Algorithm), 최소 신장 트리(MST) c++ 구현 우리는 흔히 알고리즘 문제를 풀다보면 적은 비용으로 연결! 하는 문제를 자주 접하게 되는데요. 자주는 보지는 않지만 가끔씩 보면 까먹기 마련입니다. 저도 까먹고 풀다가 어..? 크루스칼 알고리즘인데 하는 생각이 들어서 이번에 다시 기억하고자 포스팅을 하려합니다. 크루스칼 알고리즘 (Kruskal Algorithm) -> 최소신장트리(MST) 구하기 위해 사용 앞서 위에서 말씀 드린듯이 적은 비용으로 연결하는 것이 핵심입니다. 무방향으로 연결된 노드와 간선이 주어졌을때 우리는 간선의 가중치(비용)에 대해서 모든 노드가 연결이 되어야 하는데 가중치(비용)이 최소화 되는것을 찾을때 사용하게 되는 알고리즘입니다. 최소 신장 트리(MST)가 뭐야? 신장 부분 그래프 (Spanning tree)에서 사용된 간선들의.. 2023. 7. 6.
[프로그래머스 섬 연결하기] c++ (풀이,코드, 크루스칼 알고리즘) 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/42861 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이, 코드 (크루스칼 알고리즘) 이 문제를 처음에는 어 그냥 최솟값에 대해서 연결만 하면 끝나는거 아니야? 하면서 코드를 일일히 나열했다. 근데 풀다가 생각을 해보니 이럴때 각 노드의 연결 값을 최소화!! 할때 크루스칼 알고리즘을 사용하는것이 기억이 났습니다. 크루스칼 알고리즘, 최소신장트리(MST)에 대한 그림과 함께 쉽게 설명👇👇👇 https://bendeng-life.tis.. 2023. 7. 6.
반응형