java

Programing Language/Java

[Effective Java] 싱글턴 만드는 방법

private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴(singleton)이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글톤이란 개념 자체는 그리 어렵지 않다. 간단하게만 보려면 아래 글만 참고해도 된다. [Design Pattern] Singleton (싱글톤) Singleton 디자인 패턴 Singleton(싱글톤)이란 인스턴스가 단 1개만 생성되어야 하는 패턴이다. Java를 사용하여 싱글턴을 만드는 방법은 다음과 같다. Singleton public class SingletonTest { private int num; private S mimah.tistory.com 책 이펙티브 자바를 토대로 싱글톤을 만드는 세 가지 방법을 서술했다. 세 가지 방법 외에도 다양한 방법이..

Programing Language/Java

[Java] Builder pattern 특징과 장단점 with. setter

빌더 패턴 특징과 장단점 빌더 패턴을 살펴보기 전, 객체를 생성 시 사용하는 두 가지 방식을 간단하게 살펴본다. 빌더 패턴은 점층적 생성자 패턴과 자바빈즈 패턴의 장점을 채택하여 만들어졌다고 볼 수 있다. 점층적 생성자 패턴 유물이다. 요즘엔 거의 자바빈즈 패턴(setter) 또는 빌더 패턴을 사용하므로 실무 코드에서는 보기 어렵다. 말 그대로 점층적으로 생성자를 늘린다는 의미이다. 보통 필드 값이 추가될 때마다 생성자를 하나씩 추가한다. public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; private fi..

Programing Language/Java

정적 팩토리 메서드 (Static factory method) [Effective Java]

정적 팩토리 메서드 (Static factory method) 정적 팩토리 메서드란 간단히 말해 객체를 생성할 때, 생성자를 쓰지 않고 정적 메서드를 사용하는 것이다. 디자인 패턴의 팩토리 메서드와는 다른 것이며, 디자인 패턴 중에는 정적 팩토리 메서드와 일치하는 것은 존재하지 않는다. 이펙티브 자바에 나오는 정적 팩토리 메서드의 장단점을 쉽게 이해하기 위해 예제 코드를 함께 기술하였으며, 이것은 무조건적인 정답이 아니기 때문에 직접 예제 코드를 만들어보는 것도 좋은 방법이다. 개인적으로는 해당 기법을 처음 보는 사람이라면 장점 1, 2, 4번과 단점만을 이해하여도 충분히 잘 사용할 수 있을 것이라 생각한다. 생성자의 접근 제어자가 public인 경우, 생성자를 통해 객체 생성을 언제 어디서든 제한 없이..

Programing Language/Java

[Java] 멀티 스레드(Multi thread)

멀티 스레드(Multi thread) 스레드에 대한 개념을 설명하기 전, 스레드는 프로세스 내에 존재하는 것이므로 프로세스에 대한 개념을 간략히 설명한다. 프로세스(process) 운영체제에서 실행 중인 하나의 애플리케이션을 프로세스라고 부른다. 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는데, 이때 실행되는 애플리케이션이 프로세스이다. 작업 관리자를 켰을 때 프로세스 탭에 출력되는 게 프로세스다. 우리가 크롬이나 엣지를 사용해 인터넷을 볼 때 작업 관리자의 프로세스 탭에 크롬이나 엣지가 나타난다. 이처럼 크롬과 엣지도 프로세스이다. 만약 인터넷 창을 여러 개 띄워서 사용하기 위해 크롬 창을 여러 개 띄운다면, 이것이 멀티 프로세스다. 스레드..

Web

[FreeMarker] 프리마커란?

프리마커란? 정확히 말하자면 Apache FreeMarker로 자바에서 사용되는 템플릿 엔진, 자바 라이브러리이다. 템플릿과 데이터를 기반으로 텍스트 출력을 생성한다. 프리마커의 확장자는 ftl이다. FreeMarker Template File의 줄임말이다. 프리마커 문법은 아래 사이트에서 확인해볼 수 있다. Apache FreeMarker Manual freemarker.apache.org 스프링, 스프링 부트로 프로젝트 진행 시 템플릿 엔진 대신 JSP를 사용할 수 있지만, 더 이상 스프링 부트에서 JSP는 추천되지 않는다. Java EE에 종속적이라는 점이 큰 단점으로 다가오기 때문이다. 예로 인텔리제이 IDE에서는 스프링 부트 프로젝트에서 JSP를 사용하는 경우 패키징을 war로 선택해야 한다. ..

Web/Spring

[Spring] @Resource 와 @Autowired 차이

@Resource 어노테이션과 @Autowired 어노테이션의 차이 두 어노테이션 모두 의존성을 주입하는 어노테이션이다. 해당 어노테이션을 사용하여 IoC 컨테이너에 등록된 빈 객체를 자동으로 주입한다. @Autowired 어노테이션에 대한 자세한 설명은 검색하면 많은 정보가 나오므로 생략하도록 한다. @Resource 어노테이션과 어떤 차이가 존재하는지를 중점적으로 살펴본다. 편의상 해당 글에서 모든 의존성 주입 방법 예시는 필드 주입으로 한다. @Autowired - 필드, 메서드, 생성자에 사용할 수 있다. - Bean의 타입을 사용해서 주입할 빈 객체를 찾는다. - 하나의 인터페이스는 한 개의 클래스로만 구현할 수 있다. (두 개 이상의 클래스가 구현하면 안 된다.) 마지막 특징 때문에 @Reso..

Solution/백준

[백준] 1065번: 한수

[백준] 1065번: 한수 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 내가 알고리즘을 좋아하지 않는 이유는 단순 논리 말고도 수학적 개념이 자주 나오기 때문인데... 이 나이가 되니 학생 때보다 수학 이해 속도가 좀 느려진 거 같다 허 허 허 (는 아직 20대 초반) Java 풀이 우선 양의 정수인 일의 자리 수와 십의 자리 수는 무조건 한수이다. 입력받는 숫자는 1000보다 작거나 같은 수라고 하였으니 백의 자리 수만 신경 쓰면 된다. (1000은 어차피 한수가 아니다) 1~9 사이의 일의 자리 숫자인 경..

Solution/백준

[백준/Java] 5622번: 다이얼

[백준] 5622번: 다이얼 5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net 이 세계에는 다양한 하드 코딩이 존재한다.. 풀이 하드 코딩 import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int sum = 0; int chr; while (true) { chr = System.in.read(); if (chr == 10) break; s..

Solution/백준

[백준/Java] 1152번: 단어의 개수

[백준] 1152번: 단어의 개수 1152번: 단어의 개수 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열 www.acmicpc.net 풀이 import java.io.*; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new Buffe..

Solution/백준

[백준/Java] 1157번: 단어 공부

[백준] 1157번: 단어 공부 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 풀이 처음 풀었던 풀이이다. import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)..

Solution/백준

[백준] 2675번: 문자열 반복

[백준] 2675번: 문자열 반복 2675번: 문자열 반복 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다 www.acmicpc.net Java 풀이 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) throws IOE..

Solution/백준

[백준] 4673번: 셀프 넘버

[백준] 4673번: 셀프 넘버 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net Java 풀이 import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) throws IOException { BufferedWriter bw = new Buffered..

밈아
'java' 태그의 글 목록