My Posts
-
[Kotlin] 일반적인 접근 VS getter로 접근JAVA & Kotlin 2021.08.21 01:48
kotlin에 대해 공부하다가 Kotlin에서는 변수등 필드에 대한 접근자(getter, setter)를 정의할 수 있는데, 이것과 일반적으로 변수 등의 필드에 접근하는 방식의 차이가 궁금했습니다. 제가 잘못 찾았을 수도 있지만, 둘의 차이가 적힌 블로그는 아직 보지 못한것 같군요..ㅠ 간단하게 보면 변수 a는 일반적인 접근으로 sample의 v값을 가져옵니다. 그리고 b는 getter를 정의해 sample의 w를 가져옵니다. 이 둘의 차이가 무엇일까요? 그리고 언제 쓰면 좋을까요? 우선 sample클래스에는 v, w라는 변수 모두 mutable한 변수로 3을 넣어줬습니다. 그리고 각각 두번 print를 해볼 것인데 a를 통해 v를 가져온 값을 프린트하고, v의 값을 10 증가시키고, 다시 a를 통해 v..
-
[Java & Kotlin] Java와 Kotlin의 접근 제한자 (가시 제한자)JAVA & Kotlin 2021.08.13 22:39
흔히들 접근제한자라고 부르는 것은 kotlin에서는 맞지 않습니다. Java와 kotlin은 그 차이가 있기 때문에 Kotlin에서도 Visibility Modifiers(가시 제한자)로 명명하고 있습니다. # Java's Access Modifiers public : 어떤 클래스에서든 접근 가능 protected : 동일 패키지의 클래스 + 외부 패키지에 있는 해당 클래스를 상속 받은 클래스에서 접근 가능 default : 동일 패키지의 클래스에서만 접근 가능 private : 해당 클래스 내에서만 접근 가능 public > protected > default > private으로 범위가 제한됩니다. 따라서 protected의 경우 private와 default에서 접근 하는 범위가 가능하면서 외부 패..
-
[Android] MVC VS MVP VS MVVM (+ SVC)Architecture & Design Pattern 2021.08.12 18:13
아키텍쳐 디자인 패턴을 공부하면서 플랫폼마다 조금씩 패턴이 다르다는 것을 느꼈고, 안드로이드에 맞는 MVC, MVP, MVVM은 무엇일까 고민을 했습니다. 이 글을 보시기 전에 기본적인 MVC, MVP, MVVM을 찾아보시고 읽으시면 더 도움이 될 것입니다. 이는 아래의 링크를 바탕으로 작성한 게시글입니다. https://academy.realm.io/kr/posts/eric-maxwell-mvc-mvp-and-mvvm-on-android/ 안드로이드의 MVC, MVP, MVVM 종합 안내서 MVC vs. MVP vs. MVVM 안드로이드 앱을 논리적 구성 요소로 체계화하려는 베스트 프랙티스 접근법은 최근 몇 년간 지속적으로 발전했습니다. 모델 뷰 컨트롤러(Model View Controller, MVC..
-
[JAVA] Reflection & SerializableJAVA & Kotlin 2021.08.10 00:55
리플렉션과 Serializable을 공부하면서 Serializable이 내부적으로 리플렉션을 이용하기 때문에 같이 포스팅합니다. Reflection 리플렉션은 run-time에 동적으로 클래스들의 정보를 알아내고, 실행할 수 있는 것을 말합니다. 일반적인 객체 생성은 compile-time에 우리가 작성한 클래스와 메소드가 컴파일되어 JVM의 메모리 영역에 올라와 있는데, 리플렉션은 그것이 아니라 run-time에 되는 것이 가장 큰 차이일 것입니다. 그래서 reflection을 통해 클래스를 분석하고(객체의 생성자, 변수, 메소드 private 포함) 객체를 만들고, 메소드를 실행할 수도 있게 됩니다.(Reflection을 쓰면 private으로 된 메소드를 호출할 수도 있습니다.) 리플렉션을 제가 써..
-
[Kotlin] Kotlin의 컴파일 과정 & Kotlin VS JAVA (Annotation Processor)JAVA & Kotlin 2021.08.09 02:47
이 글은 코틀린을 이미 어느정도 아시는 분들을 위한 포스팅입니다. 코틀린을 모르시는 분들에게는 다소 불친절할 수 있으니 양해부탁드립니다. 다들 이미 아시겠지만 코틀린은 JVM위에서 동작하며, JAVA와 마찬가지로 정적 타입 프로그래밍 언어입니다. * 정적 타입(Statically typed) 프로그래밍 언어 : 타입 즉, 자료형을 컴파일 타임에 결정하는 프로그래밍 언어입니다. 장점 : 컴파일 타임에 타입에 대한 정보가 결정되어 런타임에 메소드를 더 빨리 호출할 수 있습니다. 안정성또한 올라 갑니다. (C, C++, JAVA, Kotlin 등) 단점 : 타입을 런타임에 결정하는 프로그래밍 언어로 런타임까지 타입에 대한 결정을 미룰 수 있어 다양한 선택지를 가질 수 있는 이점을 가집니다. (단 안정성이 그만..
-
MVC VS MVP VS MVVMArchitecture & Design Pattern 2021.08.04 20:53
MVC, MVP, MVVM이라는 아키텍쳐 디자인 패턴을 공부하면서 느낀 것은 플랫폼마다 적절한 아키텍쳐가 있다는 것입니다. Spring에서는 MVC가 가장 적절한 이유가 있고, Android에서는 MVVM이 현재 대세인 이유가 있는 것 같습니다. 또한 각 플랫폼마다 각 아키텍쳐의 구조도 조금씩 달라지니 유의하시기 바랍니다. # 왜 아키텍쳐 디자인 패턴이 필요할까? 화면에 무언가 데이터를 보여주기 위해서는 데이터를 생성하고, 관리하는 Model이 필요하고, 이 데이터를 사용자에게 UI로 보여주기 위한 View는 공통적으로 필요합니다. 이렇게 Model, View만 사용하게 된다면 둘 사이의 의존성이 심해지고, 이는 이후 변경사항이 생겼을 때 유지보수에도 좋지않고, 테스트 코드를 짤 수도 없을 것입니다. 이..
-
객체지향 프로그래밍 & 특징Architecture & Design Pattern 2021.07.29 18:49
객체지향 언어의 특징은 캡슐화, 상속, 다형성, 추상화가 있습니다. 솔직히 저는 그동안 면접용을 위해 이 4개의 특징이 무엇인지 달달 외웠던 것 같고, 실제로 무슨 특징을 의미하는 것인지는 몰랐습니다. 그래서 디테일하게 객체지향 언어가 무엇인지 공부를 해보았고, 포스팅하게 되었습니다. # 절차지향 프로그래밍? 프로그램을 구현하게 되면 그 안에는 데이터와 데이터를 조작하는 함수나 프로시저로 이루어져있습니다. 프로시저는 다른 프로시저를 사용할 수도 있고, 각각의 프로시저가 같은 데이터를 사용할 수도 있는데, 이러한 프로시저가 중심이 되어 프로그램을 구성하는 기법을 절차지향 프로그래밍이라고 합니다. 절차지향 언어의 문제는 기존의 프로그램을 수정할 때 생기게 됩니다. 데이터 중심적으로 프로그램을 짜게 된다면, ..
-
[알고리즘/토끼와 거북이] 플로이드의 토끼와 거북이 (Floyd's Tortoise and Hare) 알고리즘Algorithms 2021.04.16 00:32
이번 포스팅은 플로이드의 토끼와 거북이 알고리즘입니다. 이 알고리즘은 Linked List에서 사이클이 있는지 확인, 사이클의 시작점, 사이클의 길이를 O(N) 시간복잡도 (공간복잡도는 O(1))로 알아낼 수 있습니다. 개인적으로 색다른 알고리즘이기도, 다양한 알고리즘 문제에서 활용하고 있는 알고리즘으로, 확실히 공부하고 싶은 마음에 올립니다. 위와 같은 사이클이 있는 연결리스트가 있다면 사이클의 시작점은 2, 사이클의 길이는 4입니다. 이를 알아내는 방법은 아래와 같습니다. # 사이클이 있는지 판단 1. 연결리스트의 시작점에 2개의 포인터를 놓습니다. (하나의 포인터는 토끼, 하나는 거북이라 부르겠습니다.) 2. 토끼라는 포인터는 한번 이동할때 2칸씩, 거북이는 한번에 한칸씩 이동합니다. 3. 이를 반..
-
[알고리즘/플로이드] 플로이드-와샬(Floyd-Warshall) 알고리즘Algorithms 2021.02.12 03:49
플로이드 와샬 알고리즘은 다익스트라, 벨만포드 알고리즘과는 달리 모든 정점간의 최단거리를 구하는 알고리즘입니다. 이 알고리즘은 동적 프로그래밍 기법을 사용한 알고리즘으로 O(V^3)이라는 시간복잡도가 필요하며, 다익스트라 알고리즘을 모든 정점 V만큼 반복한 것보다 더 빠릅니다. 또한 음의 가중치 간선은 존재할 수 있으나 음의 가중치 사이클은 없다고 가정합니다. # 경유점 경유점이라는 개념은 플로이드 와샬 알고리즘의 핵심입니다. 어떤 경로든 최단 경로사이의 경유지가 존재할 것입니다. 위 그래프를 가정하면 1->2를 가는 최단 경로는 (1->3->4->2)가 되고, 3, 4는 1->2사이의 경로에 존재하는 경유점이 됩니다. 즉, u->v로 가는 최단 경로가 있다면 이것은 크게 두가지로 나뉠겁니다. 1. 경로..
-
[Develop&Design] 'PICA' 안드로이드 App & ServerAndroid App 2021.02.02 00:43
[미출시 어플리케이션입니다.] ## 기능 - 나만의 추억을 간직하고 있는 사진을 모아 앨범으로 만들어 볼 수 있고, 이 앨범을 친구들과 공유하는 SNS 서비스 - 사진 필터 및 편집 기능, 사진에는 위치 데이터, 태그, 게시글과 같은 메타데이터를 함께 넣을 수 있음 - 인공지능을 통해 사용자의 앨범 중 '노을'과 같은 사진의 카테고리를 검색하면 관련된 사진을 함께 모아볼 수 있는 기능 ## 기간 및 역할 - 2020.01.06 ~ 2020.11.24 (일정 상 중간 딜레이로 인해 늦어짐, 실제 작업 기간은 약 5개월) - 전체 기획, 디자인, DB 구조 설계 및 SQL 쿼리 코딩, 안드로이드 앱, Spring 일부 개발, 인공지능을 활용한 검색 및 우선순위 평가 알고리즘 개발 ## 환경 및 API - J..
-
[알고리즘/벨만포드] 벨만-포드(Bellman-Ford) 알고리즘Algorithms 2021.01.23 03:12
벨만-포드 알고리즘은 이전에 한 다익스트라 알고리즘처럼 단일 시작점에서 모든 정점까지의 최단거리를 구하는 알고리즘입니다. 이 알고리즘은 다익스트라와 달리 가중치가 음수인 간선을 포함하는 그래프에서 최단 경로를 정확히 구할 수 있고, 음수인 사이클을 판별해낼 수 있습니다. 다익스트라 알고리즘에 비해 시간복잡도가 좋지 않으므로, 음수인 간선을 갖는 그래프나 음수인 사이클을 판별할 때 사용하는 것이 좋습니다. # 완화 (Relaxation) 이 알고리즘의 가장 핵심이 되는 특성입니다. u에서 v까지의 최단거리 dis[v] cur.weight + nextNode.weight이 만족할 경우에만 우선순위 큐에 넣었습니다. 1 2 3 4 5 6 7 for (Node nextNode : graph.sparseList...
-
[JAVA/DataType & String] 데이터 타입과 String에 대해JAVA & Kotlin 2021.01.21 03:31
# Primitive Type VS Reference Type Primitive Type (원시형) : 자바의 기본적인 자료형으로 Stack 영역에 저장됩니다. - 정수형 : byte (1byte), short (2byte), int (4byte, 약 20억까지 표현가능), long (8byte) - 실수형 : float (4byte), double (8byte) - 논리형 : boolean (1byte) - 문자형 : char (2byte) Reference Type : 원시형을 제외한 모든 자료형, new키워드를 이용해 생성되는 데이터로, 모두 Heap 영역에 저장됩니다. (GC의 대상) # Wrapper class byte (Byte), short (Short), int (Integer), long..