자바

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

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

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

Programing Language/Java

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

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

Solution/백준

[백준] 1065번: 한수

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

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..

Programing Language/Java

[Java] 메서드의 매개 변수 개수가 정해져 있지 않을 때

메서드의 매개 변수 개수가 정해져 있지 않을 때 메서드 선언 시 매개 변수의 개수를 정하지 않고, 메서드 호출 시마다 매개 변수 개수를 바꾸며 호출해야 할 때가 있다. 이때 두 가지 방법으로 매개 변수의 개수를 랜덤 하게 지정할 수 있다. sum 메서드를 예시로 든다. int sum1(int[] values) { int sum = 0; for (int val : values) sum += val; return sum; } int sum2(int... values) {} 첫 번째로는 매개 변수를 배열 타입으로 선언하는 것이다. 메서드 호출 시 배열을 넘겨줌으로써 배열 안에 담긴 데이터를 모두 전달한다. 단점이 있다면 메서드 호출 전 배열을 미리 선언해야 된다는 것이다. int[] values = {1, 2..

Daily/TIL

[TIL] 2022.01.27 - JSP, Serlvet, Spring

음~ 오늘도 다 아는 내용~ 하지만 서블릿 재밌어~... 하다가! 갑자기 어려운 내용 쏟아져버리기 아파치와 톰캣 예전에 아파치는 정적 페이지였고 이후 톰캣이 동적 페이지를 만들었다. 나중에 아파치가 톰캣을 인수해서 아파치/톰캣이 되었다. 그래서 동적 페이지를 말할 땐 아파치/톰캣이라 한다. 즉 두 개를 같이 붙여서 말하는 게 동적 페이지라는 뜻. 그냥 아파치라고만 부르면 그건 정적 페이지를 뜻하는 것이다. 참고로 정적 페이지는 단순 Web Server라 하고, 동적 페이지는 Web Application Server라 한다. 추상화 공통된 것들을 추려 기능과 구현의 역할을 나누는 것이다. 예를 들어 인터페이스에는 DB 접속에 연결하기 위한 방법과 정보 등을 작성하고, 이를 구현하는 클래스에서 직접적인 기능..

Web/게시판 만들기

[JSP] 게시판 만들기 07 - 글 삭제 구현

글 삭제 구현 지금까지 만든 게시판은 보안 요소가 전혀 없는 게시판이었습니다. 그래서 글 삭제 부분도 보안 요소는 없습니다(?) 글 삭제는 DELETE 쿼리만 실행하면 되기 때문에 엄청나게 간단합니다. Controller case "/deleteOk.do": command = new DeleteCommand(); command.execute(request, response); viewPage = "deleteOk.jsp"; break; } 삭제 기능은 write나 update 같은 입력 폼이 필요하지 않으므로 deleteOk.do 만 사용합니다. DeleteCommand package com.command; import java.sql.SQLException; import javax.servlet.htt..

Web/게시판 만들기

[JSP] 게시판 만들기 03 - 전체 글 목록 구현

Controller 작성 Controller 작성은 게시판의 기능을 모두 만들어야 하므로 할 일이 많은 부분입니다. 우선 만들어볼 게시판 기본 기능은 아래와 같습니다. 1. 전체 도서 목록 보기 (== 전체 글 목록 보기) 2. 선택한 글 한 개 읽기 (글 상세 보기) 3. 글 작성 4. 글 수정 5. 글 삭제 전체 도서 목록은 list.do로 요청받을 것이고, 글 한 개 읽기는 view.do로 요청받습니다. 글 작성은 write.do로 요청받는데, 글을 작성하는 페이지와 작성한 글을 데이터베이스에 저장하기 위해 넘어가는 페이지가 필요하므로 writeOk.do도 생성합니다. 글 수정 update도 write와 유사합니다. 글 삭제는 글 작성, 글 수정과는 달리 따로 데이터를 입력하는 폼이 필요하지 않으므..

Web/게시판 만들기

[JSP] 게시판 만들기 02 - DTO와 DAO, Controller 생성

MVC2 패턴을 사용할 것이므로 우선 DTO와 DAO를 생성해주겠습니다. MVC2 패턴은 JSP에서 모든 것을 하는 MVC1 패턴과는 달리 Servlet에서 웹 브라우저가 요청하는 것을 처리하므로 유지보수가 쉽고, 코드 가독성도 좋습니다. DTO와 DAO는 MVC에서 M(Model) 부분에 해당합니다. 프로그램의 데이터 부분에 속합니다. DTO (Data Transfer Object) 생성 DAO 등과 연동하여 데이터를 실어나르는 객체로, 필요한 객체 (entity)만큼 작성합니다. VO(Volumne Object)라고도 하는데, VO는 read only/immutable 속성을 가집니다. 웹 개발 시 클래스 필드명, DB 필드명, form의 name명은 일치시켜 주어야 편리합니다. src/main/ja..

밈아
'자바' 태그의 글 목록