반응형 분류 전체보기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. 이전 1 ··· 21 22 23 24 25 26 27 ··· 35 다음 반응형