본문 바로가기

JAVA

(17)
Java - 싱글톤 패턴(Singleton Pattern) 싱글톤 패턴이란? : 객체의 인스턴스가 오직 1개만 생성되는 패턴. 어떤 클래스가 최초 한번만 메모리를 할당하고 (보통 static 영역) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다. 인스턴스가 필요할 때 만들어내는 것이 아닌 기존 인스턴스를 사용한다. IoC특징을 가지는 Spring FrameWork에서 Bean으로 등록되는 컨테이너들이 싱글톤 패턴을 사용하여 하나의 인스턴스만 생성하여 관리한다. 싱글톤 패턴을 사용하는 이유 - 고정된 메모리 영역을 사용하기 때문에 메모리 낭비를 방지할 수 있다 - 전역으로 사용되는 인스턴스이기 때문에 다른 클래스간에 데이터 공유가 쉽다. - 도메인 관점에서 인스턴스가 한개만 존재할 수 있도록 보증하고 싶은 경우 싱글톤 패턴의 문제점 - 멀티스레드 환경에서..
Java - Checked Exception VS Unchecked Exception Exception에 대해서 간단히 알아보자. 자바에서 예외는 3가지로 나눌 수 있다. - Checked Exception - Unchecked Exception - Error 예외(Exception) 프로그램개발에서 아주 친숙(?)하게 볼 수 있는 단어이다. 이는 프로그램에서 입력 값에 대한 처리가 불가능하거나, 프로그램 실행 중에 참조된 값이 잘못된 경우(보통 개발자의 실수에서 발생한다) 등등.. 정상적인 프로그램의 흐름이 어긋나는 상황에 발생함을 의미한다. 그리고 자바에서 예외는 개발자가 직접 처리할 수 있기때문에 미리 예측하여 제어가 가능하다. 예외는 Checked Exception과 Unchecked Exception으로 나뉘며, 아래에서 다시 설명할 것이다. 에러(Error) 자바 가상머신에서 ..
Java - 커맨드패턴(Command Pattern) 커맨드패턴(Command Pattern)이란? : 객체의 행위(메소드)를 클래스로 만들어 캡슐화 하는 패턴. 커맨드패턴은 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계한다. 어떤 객체에서 다른 객체의 메소드를 실행하려면 참조를 하고 있어야 하는 의존성이 발생하는데, 이 의존성을 제거할 수 있다. 커맨드패턴 구현예제 public class Main { public static void main(String[] args) { // 채널변경 Channel channel = new Channel(); MyHome home = new MyHome(); home.setCommand(new ChannelCommand(channel)); home.touch1(); hom..
Java - try-with-resources를 통한 자원해제방법 최근에 FileReader, BufferedReader를 공부하면서, 버퍼의 자원해제 관련하여 새로 알게된 내용이 있어 남겨둔다 = FileReaderTests.java package com.ys.test.lab; import com.ys.test.lab.common.File; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; public class FileReaderTests { File file; @BeforeEach public void load() { this.fi..
Java - 정규표현식 정리 정규 표현식 문법 기호 설명 [] 한 개의 문자 ([abc]: a,b,c중 하나의 문자, [^abc]: a,b,c 이외 하나의 문자, [a-zA-Z] a~z A~Z중 하나의 문자) \d 한 개의 숫자 ([0-9]와 동일) \D 숫자를 제외한 모든 문자 \s 공백 문자 \S 공백 문자가 아닌 나머지 문자 \w 알파벳이나 숫자, 언더바 \W 알파벳이나 숫자 (언더바는 제외) ? 없음 또는 한 개 * 없음 또는 한 개 이상 + 한 개 이상 {} 횟수 또는 범위를 나타냄 {n} 정확히 n개 {n,} 최소한 n개 {n, m} n개에서부터 m개까지 () 그룹핑 (소괄호 안의 문자를 하나의 문자로 인식) ^ 문자열의 시작 $ 문자열의 종료 . 임의의 한 문자 | 패턴 안에서 or 연산을 수행할 때 사용 자주 사용하는..
Java - 자료구조와 컬렉션 프레임워크 출처: https://static.javatpoint.com/images/java-collection-hierarchy.png 출처: https://media.vlpt.us/images/wo_ogie/post/d8a7523a-0aa7-41d0-a593-dd10bef6881f/image.png 컬렉션 프레임워크(collection framework)란? 자바에서 데이터를 저장하는 클래스들을 표준화한 클래스 집합. 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해놓음 자료구조 Collection Collection은 객체의 모음, 그룹이다. Iterable 인터페이스를 상속받으므로 Iterable 인터페이스는 내부에 Iterator 인터페이스를 반환하는 iterator() ..
Java - 빌더 패턴(Builder Pattern) 빌더 패턴(Builder Pattern)이란? : GoF(Gang of Four) 디자인 패턴 중 생성패턴(Creational)에 해당하며, 빌더패턴은 복잡한 객체를 생성하는 클래스와 표현하는 클래스를 분리하여 동일한 절차에서도 서로 다른 표현을 생성하는 방법을 제공한다. 자바에서는 생성자에 값을 담아 보낼때, 어떤 값을 전달하는지 알기가 힘들며, 또 인자가 많아지면 더더욱 확인이 어려워진다. - GoF 디자인패턴 더 알아보기: https://velog.io/@namezin/GoF-design-pattern 점증적 생성자 패턴(telescoping construtor patter) : 클래스 내에 오버로딩을 통해 생성자를 여러개 작성하는 것 = 장점 - 선택적으로 인자를 받을 수 있다. = 단점 - 인자..
Java - 설정 옵션 (Garbage Collector) 옵션 -server : Java Hotspot Server VM을 선택. Java Hotspot Client VM대비 구동 시간은 오래걸리지만, 이후부터는 빠른 성능을 발휘한다. (참고: https://docs.oracle.com/javase/7/docs/technotes/guides/vm/server-class.html) -Djava.net.preferIPv4Stack : IP4 사용여부 (boolean) -Dsun.io.useCanonCaches : Java의 정규화 캐시 사용여부 (boolean) -Dfile.encoding : Java 소스파일 인코딩 -Djava.awt.headless : 비윈도우 환경에서 GUI 클래스를 사용할 수 있게해주는 옵션 GC 관련 옵션 -Xms : JVM시작시 Hea..
Java - Garbage Collector Garbage Collector(가비지 컬렉터)란? 쓰레기 수집. 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역중, 필요없게 된 영역의 메모리를 회수하는 기능이다. C언어와 같은 경우에는 free() 함수를 통해 직접 메모리를 해제해줘야하는데, Java나 Kotlin에서는 JVM에서 Garbage Collector가 불필요한 메모리를 알아서 정리해준다. 아래의 코드를 살펴보자. String[] arr = new String[3]; arr[0] = "a"; arr[1] = "b"; arr[2] = "c"; arr = new String[] {"가비지", "컬렉터", "설명"}; 처음에 선언한 arr와 아래에서 선언한 arr는 메모리 주소값이 다르다. 그렇다면 처음 선언했던 arr..
Java - 데이터 타입(기본타입, 참조타입) 기본 변수 타입 - 논리형 변수타입 boolean (기본타입하고 형변환 불가) - 문자열 변수타입 char (단일 문자열, 아스키코드, 유니코드) - 정수형 변수타입 byte (1Byte, -128 ~ 127) short (2Byte, -32,768 ~ 32,767) int (4Byte, -2,147,483,648 ~ 2,147,483,647) long (8Byte, -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807) - 부동소수점(실수형) float (4Byte, 1.40239846E-45f ~ 3.40282347E+38f) double (8Byte, 4.94065645841246544E-324 ~ 1.79769313486231570E+308) 참조타입 ..