분류 전체보기(61)
-
[Android A..Z] Clean Architecture
Clean Architecture란? 고객들에게 제공하는 어플리케이션 같은 경우에는 수많은 기능들이 있기에 복잡도가 굉장히 높다. 복잡도가 높은 어플리케이션을 개발할 때 어떻게 하면 유지 보수 하기 쉽고 고품질의 코드를 작성할 수 있을까? 어플리케이션은 새로운 기능이 추가된다거나 내부 로직이 변경되어야 하는일이 생겼을 때 유연하게 대처할 수 있도록 구조화 해야한다. 클린 아키텍처의 개념은 2012년에 Uncle Bob님이 블로그에 기재하며 세상에 나오게 되었다. 클린 아키텍처의 목표는 계층을 분리하여 관심사를 분리하는 것이다. 이게 무슨 의미가 있을까? 예를 들어 안드로이드 로컬 DB를 기존에 Realm을 사용하고 있다. Realm으로 수많은 기능을 구현하고 이미 제품까지 나와 있는 상황이다. 그런데 갑..
2021.11.21 -
[JAVA ] Static이란? 정적 변수 정적 메소드에 관하여
1. Static Java에서 Static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미한다. 이를 정확히 이해하기 위해서는 메모리 영역에 대한 이해가 필요. [Static의 메모리] 일반적으로 개발자가 만든 Class는 Static 영역에 생성되고, new 연산을 통해 생성한 객체는 Heap영역에 생성된다. 객체의 생성시에 할당된 Heap영역 메모리는 GC(Garbage Collector)를 통해 수시로 관리를 받는다. 하지만 Static 키워드를 통해 Static영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만, Garbage Collector의 관리 영역 밖에 존재하므로 Static을 자주 사용하면 프로그램의 종료시까지 메모리가 할당된..
2021.11.17 -
[디자인패턴]MVC, MVP, MVVM 비교
MVC, MVP, MVVM등 다양한 디자인 패턴을 적용하는 이유는 각각의 역할을 나눠 코드를 관리하자 라는 목적으로 생겨났다. 1. MVC MVC패턴은 Model+View+Controller를 합친 용어이다. MVC패턴의 구조, 동작, 특징, 장점, 단점으로는.. 1) 구조 - Model: Controller에서 요청받은 데이터 관련 작업들을 처리하는 부분 - View : 어플리케이션에서 사용자가 눈으로 보는 부분, 모델에서의 데이터를 뷰에서 나타냄 - Controller : 사용자의 입력을 받고 처리하는 부분 2) 동작 MVC 패턴의 동작 순서 1. 사용자의 Action은 Controller로 들어온다. 2. Controller는 사용자의 Action을 확인하고 Model에 데이터를 요청한다. 3. V..
2021.11.17 -
[Java] 인터페이스와 추상클래스의 차이
추상클래스란? 일반적으로 Java에서 클래스는 2가지로 구분된다. (일반 클래스와 추상 클래스) 추상 클래스는 0개 이상의 추상메소드(아직 구현되지 않은 자식이 구현할)를 가지고, 일반 메소드, 일반 변수 또한 가질 수 있다. 그렇기에 인터페이스 역할도 하면서, 구현체도 가지고 있는 돌연변이 같은 클래스이다. 선언 시 키워드는 abstract 키워드를 사용한다. - 추상클래스는 인스턴스화 할 수 없다. 즉 추상클래스는 상속을 의미함으로써 물려주는 개념이 된다. 그렇기에 부모-자식 관계인 계층 구조를 나타낸다. abstract class Animal { abstract void bark(); void feed(){ } } 인터페이스란? 인터페이스는 쉽게 말하면 껍데기라고 말할 수 잇고, 설계도 또는 명세서..
2021.11.16 -
[JAVA] String 문자열과 StringBuilder, StringBuffer의 비교
Java에서 문자열을 다루는 클래스는 String, StringBuilder, StringBuffer가 있다. 문자열의 연산이 많이 발생할 때를 생각하면 위 클래스의 특징을 이해하고 상황에 맞는 적절한 클래스를 사용해야 한다. String과 StringBuffer/StringBuild 클래스의 가장 큰 차이점은 String은 불변(immutable)의 속성을 갖는다는 점이다. String str = "Hello"; str+=" world"; 위의 코드를 보면 문자열 str이라는 변수가 Hello world로 변경된 것으로 착각할 수 있다. 하지만 기존에 "Hello"값이 들어가 있던 String 클래스의 참조변수 str이 "Hello world"라는 값을 가지고 있는 새로운 메모리영역을 가리키게 변경되고..
2021.11.16 -
[Java] Java파일의 컴파일 과정
자바는 OS에 독립적인 특성을 가지고 있다. 그게 가능한 이유는 JVM(Java Virtual Machine) 때문이다. JVM의 어떤 기능 때문에 OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보자. 자바 컴파일 순서 1. 개발자가 자바 소스코드(.java)를 작성합니다. 2. 자바 컴파일러가 자바 소스코드(.java)파일을 읽어 바이트코드(.class)코드로 컴파일 합니다. 바이트코드(.class)파일은 아직 컴퓨터가 읽을 수 없는 JVM(자바 가상 머신)이 읽을 수 있는 코드입니다. (java - > class) 3. 컴파일된 바이트코드(.class)를 JVM의 클래스로더(Class Loader)에게 전달합니다. 4. 클래스 로더는 동적로딩(Dynamic Loading)을 통해 ..
2021.11.16 -
[Java] 직렬화(Serialization)
직렬화를 알아보기 전에 Primitive Type과 Reference Type을 간단히 알아보자. Primitive Type은 원시 자료형으로 int, bool, char, short, double과 같은 자료형을 말한다. Reference Type은 Primitive Type을 제외한 타입들이 모두 Reference Type이다. 클래스 타입, 인터페이스 타입, 배열 타입, 열거 타입 등이 있다. 필자는 시리얼라이제이션을 데이터 클래스를 직렬화 할 때 사용한다. 그 이유는? 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터를 변환해야 하기 때문이다. 각자 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 갖기 때문에, Reference ..
2021.11.16 -
[Set과 Map] 자료구조 Set과 Map이란?
Set의 구조는 이렇다. Set이라는 인터페이스를 구현해 HashSet, TreeSet등을 사용한다. Set : 데이터의 집합이며 순서가 없고 중복된 데이터를 허용하지 않는 배열 HashSet은? 1. 순서가 없는 배열이다. 2. 중복 값을 가질 수 없다. 3. 첨자가 없다. 4. 해시 함수를 사용하기 때문에 Set중에 속도가 가장 빠르다. 5. 인덱스가 따로 존재하지 않아 Iterator를 사용한다. 해시 테이블을 사용해서 해시값을 기반으로 데이터를 저장하기 때문에 특정값을 포함하는지 확인하는 작업이 매우 빠르다. TreeSet은? TreeSet은 이진 탐색 트리를 기반으로 한다. 1. 데이터들이 오름차순으로 정렬된다. 2. 데이터 삽입, 삭제에는 시간이 걸리지만 검색, 정렬이 빠르다. LinkedHa..
2021.11.16 -
[Hash] 해시란?
해시(Hash) 해시란 데이터를 다루는 기법 중에 하나로 검색과 저장이 아주 빠르게 진행된다. 데이터를 검색할 때 사용할 Key와 실제 데이터의 값(Value)이 한 쌍으로 존재하고, Key값이 배열의 인덱스로 변환되기 때문에 검색과 저장의 평균적인 시간 복잡도가 O(1)에 수렴하게 된다. 즉 데이터를 효율적으로 관리하기 위해, 임의의 길이 데이터를 고정된 길이의 데이터로 매핑하는 것 해시 함수를 구현하여 데이터 값을 해시 값으로 매핑한다. 해시 함수, 해시 알고리즘, 해시코드 데이터의 value값을 배열의 인덱스인 정수로 변환하기 위해서는 일련의 과정이 필용하다. 예를들어 데이터를 문자열로 받게 되었을 때 문자 한글자 한글자 아스키 코드값을 더하는 과정으로 문자열을 정수 값으로 변환할 수 있다. (만약..
2021.11.16 -
[Tree] 트리란?
😘트리 : Node와 Edge로 이루어진 자료구조 트리는 값을 가진 노드와 이 노드들을 연결해주는 간선으로 이루어져있다. 그림 상 데이터 1을 가진 노드가 루트(Root)노드다. 모든 노드들은 0개 이상의 자식(Child) 노드를 갖고 있으며 보통 부모-자식 관계로 부른다. 😁 트리의 특징 1. 트리에는 사이클이 존재할 수 없다. (만약 사이클이 생기면 그것은 그래프다) 2. 모든 노드는 자료형으로 표현이 가능하다. 3. 루트에서 한 노드로 가는 경로는 유일한 경로 뿐이다. 4. 노드의 개수가 N개면, 간선은 N-1개를 가진다. 😍 트리 순회 방식 트리를 순회하는 방식은 총 4가지가 있다. 위의 그림을 예시로 진행해보자. 1. 전위 순회(pre-order) 각 루트(Root)를 순차적으로 먼저 방문하는 ..
2021.11.16