본문 바로가기

전체 글

(96)
[Spring] 싱글톤 패턴(Singleton pattern) 싱글톤 패턴이란 싱글톤 패턴을 따르는 클래스는 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출 된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글톤 패턴이라고 한다. 즉, 여러 사용자가 매번 객체를 호출할 때마다 객체를 생성하는 것이 아닌 최초에 생성된 객체 하나를 재사용 하는 것을 의미한다. 싱글톤 패턴 사용 이유 같은 클래스의 객체를 만들어 사용하게 될 경우, 매번 새로운 객체를 만들게 되면 메모리의 낭비가 심하기 때문에 이를 방지하고자 사용한다. 예를들어, 순수한 DI 컨테이너 @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig =..
[Spring] 의존성주입(Dependency Injection, DI) DI란 의존성 주입이라는 의미로 객체간의 의존성을 자신이 아닌 외부에서 주입해주는 개념이다. 여기서 의존이란, 한 클래스가 다른 클래스의 메소드를 실행하는 것을 말한다. MemberRegisterService에서 MemberDao를 사용하여 DB에 접근한다면, 이 때 MemberRegisterService는 MemberDao 클래스에 의존한다고 표현한다. DI 장점 일반적으로 우리가 객체를 사용할 때에는 아래와 같이 객체를 얻어왔다. public class MemberRegisterService { private MemberDao memberDao = new MemberDao(); .. } 위와 같이 클래스 내부에서 직접 의존 객체를 생성하는 것은 사용하기 쉽지만, 유지보수 관점에서 문제점을 유발할 수 ..
[Java] Enum Enum이란 Enumeration의 약자로 몇 가지 상수의 집합을 정의하는 타입으로 클래스의 특수한 형태이다. 집합이 갖는 값이 한정되어 있고 다른 값이 허용되지 않는 경우에 사용된다. ex) - 사계절 : 봄, 여름, 가을, 겨울 - 요일 : 월, 화, 수, 목, 금, 토, 일 - 성별 : 남성, 여성 사용 이유 1. 코드가 단순해지며, 가독성이 좋아진다. 2. 인스턴스 생성과 상속을 방지하여 컴파일 시에 상수값의 타입안정성이 보장된다. 3. enum 키워드를 통해 구현의 의도가 열거임을 분명하게 알 수 있다. 내부 API public enum Rank { THREE(3, 4_000), FOUR(4, 10_000), FIVE(5, 30_000); private final int match; privat..
[Spring] ResponseEntity ResponseEntity란 웹 서비스에서는 많은 정보를 송수신하게된다. 각각의 다른 웹 서비스들이 대화하려면 서로 정해진 약속에 맞게 데이터를 가공해서 보내야하는데, 이때 보내는 요청 및 데이터 형식을 HTTP(HyperText Transport Protocol)이라고 한다. 우리는 Spring Framework에서 제공하는 클래스 중 *HttpEntity를 상속받아 구현한 클래스인 ResponseEntity를 활용하여 빠르고 쉽게 규격에 맞는 HTTP응답을 생성할 수 있다. ResponseEntity는 사용자의 HttpRequest(요청)에 대한 응답(HttpStatus, HttpHeaders, HttpBody)을 포함한다. *HttpEntity HTTP요청 또는 응답에 해당하는 HttpHeader와..
[Spring] Bean Bean이란 스프링 IOC 컨테이너에 의해서 관리되는 자바 객체이다. 우리가 순수 자바코드에서 new 해서 사용하는 객체는 스프링 빈이아니다. (스프링 컨테이너에 의해 관리되는 객체가 아니기때문에) ApplicationContext.getBean() 으로 얻어지는 객체가 스프링 빈이다. Bean 등록하는 법 1. Component Scanning @ComponentScan 어노테이션이 포함된 클래스부터 하위 패키지까지 모든 클래스를 조회하여 @Component 어노테이션이 붙은 클래스들을 스프링 컨테이너에 빈으로 자동으로 등록해 줄 수 있다. 2. 빈 설정파일에 직접 빈을 등록 (xml)
[Spring] Annotation 어노테이션이란 사전적으로는 주석이라는 의미를 가지고 있으나, 자바에서 사용될때의 어노테이션은 코드 사이에 주석처럼 사용하여 특별한 의미를 부여해준다. 즉, 프로그램에게 추가적인 정보를 제공해주는 메타데이터(데이터를 위한 데이터)라고 볼 수 있다. 자주 사용하는 어노테이션 @Component 개발자가 생성한 Class를 Spring의 Bean으로 등록할 때 사용하는 어노테이션. Spring은 해당 어노테이션을 보고 Spring의 Bean으로 등록한다. @Component(value="myman") public class Man { public Man() { System.out.println("hi"); } } @ComponentScan Spring Framework는 @Component, @Service,..
[Java] 문자열 배열에 저장하기 split() 메소드를 이용하여 문자열을 String 배열에 넣기 한 글자 씩 배열에 저장 String str = "hello"; String[] arr = str.split(""); 결과 arr[0] = "h" arr[1] = "e" ... arr[4] = "o" 공백을 기준으로 나누어 배열에 저장 String str = "hello world"; String[] arr = str.split(" "); 위 같은 경우 공백을 기준으로 나누어 배열에 저장한다. str.split("")과 str.split(" ") 는 쓰임이 다르니 잘 구분하여 사용하자. 결과 arr[0] = "hello" arr[1] = "world" 특정한 구분자를 기준으로 배열에 저장 String str = "hello,world"; ..
[Java] replace()와 replaceAll() replace() replace란 자바에서 문자열을 치환할 때 쓰는 메소드이다. replace("찾을 문자", "치환할 문자"); 정도로 이해하고 쓰면 되겠다. ex) String str = "Hello World"; System.out.println(str); // 결과 : Hello World str = str.replace(" ", ""); // 공백을 제거 System.out.println(str); // 결과 : HelloWorld replaceAll() replaceAll()을 사용하게 되면 손쉽게 정규식을 사용하여 문자를 치환할 수 있게된다. (replace()도 정규식을 사용하는 방법이 있긴하다.) replaceAll("[바꾸고 싶은 문자의 정규식]", "치환할 문자"); 정규식 테이블 정..