본문 바로가기
반응형

분류 전체보기313

싱글톤 패턴(Singleton Pattern) 싱글톤 패턴은 생성(Creational) 패턴 중 하나로써 객체를 오직 하나만 생성하여 생성된 객체를 프로그램 어디에서나 접근하여 사용할 수 있도록 하는 패턴이다. ​간단하게 얘기하면 필요할 때마다 똑같은 객체를 매번 생성하지 말고 기존에 생성한 하나의 객체를 활용하도록 하는 디자인 패턴이다. ​싱글톤 패턴의 구조는 다음과 같다. Singleton : 하나의 객체만 생성하도록 보장해주며 getInstance() 메서드를 통해서만 다른 클래스에서 객체에 접근할 수 있도록 해주는 클래스 간단한 예시를 통해 싱글톤 패턴을 이해해 보자. ​회사에서 직원들이 모두 사용하는 정수기가 있다고 하자. 정수기의 이름을 간단하게 A라고 하겠다. 정수기를 사용할 때마다 정수기의 물의 양을 1만큼 감소한다고 하자. 이를 코드.. 2021. 7. 21.
[Java] 초기화 블록(Initialization Block) Java에선 클래스 변수, 인스턴스의 변수의 초기화가 복잡하거나 공통된 부분이 많을 경우 초기화 블록을 사용하면 코드를 간결하게 할 수 있다. ​초기화 블록의 종류로는 Static Block과 Instance Block이 존재한다. 초기화 블록은 다음과 같이 클래스 내에 선언하여 사용하면 된다. static { //Static Block } { //Instance Block } 너무 간단한 내용이라서 다음 코드의 실행 결과를 보면 초기화 블록이 어떤 것인지 이해할 수 있을 것이다. class InitializationBlock { static String staticBlock; String instanceBlock; static { //Static Block staticBlock = "클래스 로딩 시 한.. 2021. 7. 21.
백준 20040 : 사이클 게임 https://www.acmicpc.net/problem/20040 20040번: 사이클 게임 사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한 www.acmicpc.net [ 문제풀이 ] 두 노드가 같은 그래프에 속하는지를 판별해주면 되기 때문에 합집합 찾기(Union Find) 알고리즘을 사용해주면 쉽게 해결할 수 있는 문제이다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; impor.. 2021. 7. 20.
[Java] 예외의 종류 프로그램 개발을 하다 보면 다양한 오류가 발생할 수 있다. Java에서는 오류가 발생하면 어떤 오류인지를 개발자에게 알려줘서 오류를 처리할 수 있도록 기능을 지원해 준다. ​Java에서의 예외는 크게 Error, RuntimeException, OtherException, 3가지의 종류가 존재한다. 이들에 대해서 알아보도록 하자. 먼저 Error이다. ​Error는 메모리 부족(OutOfMemoryError), 스택오버플로우(StackOverFlowError)처럼 자바 가상 기계(JVM)나 하드웨어 등 시스템의 문제로 발생하는 것을 의미한다. ​즉, 개발자가 처리할 수 있는 영역이 아니기 때문에 Error가 발생하면 프로그램을 종료시키는 것이 보통이다. ​ 다음으로 Exception이다. ​Error와 .. 2021. 7. 19.
[Java] try-with-resources : 자원을 할당하는 방법 Java에선 Stream이나 DB Connection처럼 다양한 자원을 외부에서 사용할 수 있다. ​하지만 어떤 언어든지 간에 자원을 사용한 후 더 이상 사용할 필요가 없다면 자원의 효율성을 위해 반환해 줘야 한다. ​ 예를 들어 입력을 받기 위해 다음과 같은 객체들을 사용한다고 하자. 입출력 관련 객체를 사용할 때는 다양한 예외 처리를 위해 보통 try-catch 문으로 감싸서 사용한다. BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(System.in)); //br 객체를 사용 br.close(); } catch (Exception e) { //Exception 처리 } 하지만 위 코드는 문제가 존재한다. tr.. 2021. 7. 19.
[Java] BigInteger : 큰 수를 표현하는 방법 Java에서 정수를 표현하는 자료형은 byte, short, int, long이 존재한다. 이들은 각각 다음과 같은 크기의 정수를 표현할 수 있다. 즉, 최대 범위인 long으로 표현할 수 있는 -9223372036854775808 ~ 9223372036854775807 내의 정수밖에 표현할 수 없다. ​그렇다면 long 범위를 벗어나는 수를 표현하고 싶다면 어떻게 해야 할까? ​예를 들어 10000000000000000000을 표현하고 싶다고 하자. ​일단 long으로는 이 수를 표현할 수 없다. 하지만 문자열로 표현한다면 이 수를 표현할 수 있다. 일단 수를 표현하는 데까지는 성공하였다. 하지만 이 수를 이용해서 다양한 연산을 할 수 있어야 한다. ​학창 시절 수학 문제를 풀 때 두 수를 덧셈하는 방.. 2021. 7. 19.
백준 11812 : K진 트리 https://www.acmicpc.net/problem/11812 11812번: K진 트리 첫째 줄에 N (1 ≤ N ≤ 1015)과 K (1 ≤ K ≤ 1 000), 그리고 거리를 구해야 하는 노드 쌍의 개수 Q (1 ≤ Q ≤ 100 000)가 주어진다. 다음 Q개 줄에는 거리를 구해야 하는 두 노드 x와 y가 주어진다. (1 ≤ x, y www.acmicpc.net [ 문제풀이 ] 두 노드의 높이를 같게 만든 후 두 노드의 번호가 다르다면 자신의 부모 노드로 올려주면서 두 노드의 번호가 같도록 만들어주면 된다. 핵심은 부모 노드의 번호를 구하는 방법인데 잘 모르겠어서 찾아보니 (자신의 번호 - 2) / K + 1이라고 한다. 주의해야 할 점은 K가 1일 경우다. 이때는 한쪽으로 몰린 트리 형태로 .. 2021. 7. 19.
백준 3980 : 선발 명단 https://www.acmicpc.net/problem/3980 3980번: 선발 명단 각각의 테스트 케이스에 대해서, 모든 포지션의 선수를 채웠을 때, 능력치의 합의 최댓값을 출력한다. 항상 하나 이상의 올바른 라인업을 만들 수 있다. www.acmicpc.net [ 문제풀이 ] 선수가 11명이고 선수당 적합한 포지션의 수가 최대 5밖에 안되기 때문에 백트래킹을 통해 모든 경우를 탐색해주면 된다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.u.. 2021. 7. 17.
[Java] 접근 제한자 Java는 클래스들로 이루어져 있으며 클래스는 필드, 메서드 등 멤버들을 가지고 있다. ​이렇게 클래스에서 연관 있는 멤버들을 묶어서 가지고 있는 작업을 캡슐화(Encapsulation)라고 한다. ​캡슐화의 특징 중 하나는 보안과 관련된 정보 은닉이다. 클래스의 멤버들 중 외부로 노출되어도 되는 것도 있지만 외부로 노출해서는 안 되는 것들도 존재할 수도 있다. ​예를 들어 사람의 정보를 가진 클래스가 존재할 경우 이름이나 나이 같은 것들은 외부에 노출되어도 괜찮지만 주민등록번호 같은 민감한 정보는 외부에 노출되면 안 된다. ​따라서 클래스 내의 멤버에 접근할 경우 범위를 제한해 줄 수 있어야 한다. ​이를 가능하게 해주는 친구가 바로 접근 제한자이다. ​Java에서는 public, protected, .. 2021. 7. 16.
반응형