Java
-
Java의 Singleton Pattern에 대하여Java 2021. 5. 26. 18:17
싱글톤 패턴이란? 싱글톤 패턴은 프로그램 어디에서든지 접근 가능하고 프로그램에서 단 하나만 존재하는 객체를 만드는 패턴입니다. 싱글톤 패턴은 아주 다양하게 사용되는데, Android에서 SharedPreference와 같은 저장소도 싱글톤 패턴으로 구현됩니다.(저장소인데 프로그램에서 여러 개 존재하면 안 되겠죠?) 싱글톤 패턴을 구현하는 방법은 여러 가지인데, 멀티 스레드 환경에서 동시성에 관한 문제 때문에 이를 해결하기 위한 기법들이 존재합니다. 객체를 생성할 때 여러 스레드가 동시에 접근하면 1개가 아니라 여러 개가 생성될 수 있는 위험이 있기 때문이죠. 구현 방법 Class SingletonTest { private static SingletonTest instance; private int val..
-
Abstract Class와 Interface의 차이Java 2021. 4. 13. 18:53
개요 Java에서 상속을 받기 위해서는 두 가지 방법이 있는데요, 하나는 Abstract Class, 또 다른 하나는 Interface입니다. 하지만, 이 둘의 차이를 명확히 구분하기가 어렵다고 생각합니다. 예전부터 이 둘의 차이와 언제 사용해야 하는지에 대해서 궁금했었는데, 이번 포스팅을 작성하면서 정리하려고 합니다. 이펙티브 자바에서도 이와 관련한 토픽들이 있으니 찾아보면 도움이 될 것 같네요. Abstract Class와 Interface의 공통점 abstract class Animal { public abstract void attack(); public void move() { System.out.println("move!"); } } interface Talkable { public void ..
-
Java에서 동시성 관리 - SynchronizationJava 2020. 12. 29. 22:35
개요 최근 출시되는 하드웨어는 거의 대부분 멀티 코어가 가능하도록 설계됩니다. 코어란 CPU 안에서 연산 처리를 하는 장치입니다. 이러한 코어를 최대한 활용하는 것이 프로그램의 성능에도 당연히 좋겠죠. 그러려면 여러 스레드나 프로세스를 동시에 실행시켜서 처리해야합니다. 여기서 발생하는 문제가 동시성 문제입니다. 은행 통장 입출금 예제를 통해 동시성 문제에 대해 살펴보겠습니다. 프로그램은 계좌 클래스, 스레드의 Task를 수행할 ThreadTask 클래스, 그리고 이를 토대로 두 개의 스레드를 생성시켜 은행 계좌를 잔고가 0원이 될때까지 출금을 하는 메인 함수로 구성되있습니다. 출금은 100, 200, 300원 중 랜덤한 값으로 출금합니다. public class Main { public static vo..
-
Java GC와 Object간 ReferenceJava 2020. 10. 18. 16:04
개요 날씨가 조금씩 쌀쌀해지는 가을이네요. 다들 환절기 감기에 조심하시기 바랍니다. 최근 위플래닛에서 프로젝트를 진행하면서 하나 배운 것이 있습니다. WeakReference란 객체인데요. 처음 접하는 개념이라 이해하기 매우 어려웠지만, GC에 대해서 이해한다면 어렵지 않게 또 배울 수 있는 것이 이 Reference입니다. 아무래도 Android 개발을 하다보면 이제는 Kotlin을 주로 사용하지만, 그래도 GC에 대한 이해는 매우 중요하다고 생각합니다. 그럼 시작하겠습니다. GC의 원리 Java에서 객체를 생성하게되면 JVM의 Heap area에서 생성이 됩니다. 그리고 이 객체를 Stack에 있는 변수들이 참조하게 되죠. 이 Heap 영역의 오브젝트들은 Stack에 있는 변수들이 참조할 수 있는지 ..
-
Java로 구현하는 DFS 알고리즘Java 2020. 2. 24. 15:40
안녕하세요, 이번 포스팅에서는 DFS 알고리즘에 대해서 알아보겠습니다. 그래프 탐색 알고리즘 중 가장 유명한 알고리즘은 아무래도 DFS와 BFS가 아닐까 생각됩니다. DFS는 스택을 활용해서 저장된 그래프의 모든 정점을 1번 방문하는 방법 중 하나인데, 갈 수 있는 만큼 최대한 많이 가고 갈 수 없을 경우 이전 정점으로 돌아가서 다시 탐색을 하는 알고리즘입니다. 그래프의 탐색 그래프는 자료구조에서 배우는 정점과 간선으로 이루어진 그래프를 의미합니다. 그래프 탐색은 하나의 정점으로부터 시작해서 차례대로 모든 정점들을 한 번씩 방문하는 것을 의미합니다. 예를 들면 특정 도시에서 다른 도시로 갈 수 있는지, 전자 회로에서 특정 단자와 단자가 서로 연결 되어 있는지에 대한 것입니다. 깊이 우선 탐색(DFS) D..