Wrapper Class는 기본형 타입을 담을 수 있는 객체이다. 즉 Wrapper Class는 기본형 타입이 객체로써 쓰여야 할 때 사용하면 된다. (byte Short byte -> Byte int -> Integer long -> Long float -> Float double -> Double boolean -> Boolean char -> Character Wrapper Class를 생성할 때 생성할 객체의 기본형 타입을 넣거나 문자열을 넣으면 되는데 Character는 문자열을 넣으면 에러가 난다. Character c1 = new Character("A"); // Erro..
* 연산자 종류 1. 산술 연산자 +, -, /, *, % 2. 대입 연산자 = 3. 복합 대입 연산자 +=, -=, /=, *=, %=, &=, |=, ^= 4. 증감 연산자 ++, -- 5. 비교 연산자 ==, !=, >, >, >>>, a = a - b a /= b -> a = a / b a *= b -> a = a * b a %= b -> a = a % b a &= b -> a = a & b a |= b -> a = a | b a ^= b -> a = a ^ b 4. 증감 연산자 ++a -> 1을 더한 후 사용 int a = 1; System.out.println(++a); // 2 a++ -> 사용 후 1을 더함 int a = 1; System.out.println(++a); // 1 Syste..
먼저 람다식을 설명하면 메서드를 하나의 식으로 표현하는 것으로 객체 지향 방식이라기보다는 함수 지향 방식에 가깝다. * 함수 지향 방식에 가깝다고 해도 자바에서 람다 또한 결국 객체이다. 때문에 람다식은 함수 형태 만으로도 사용할 수 있다. import java.util.stream.IntStream; IntStream.range(0, 10).forEach(n -> System.out.println(n)); 아래는 다양하게 작성해본 기본적인 람다식의 형태이다. (int n, String str) -> { return n + str; } (int n, String str) -> n + str (n, str) -> n + str (str) -> str + 1 str -> str () -> "Hello" ()..
String을 합치는 방법은 StringBuffer, StringBuilder, +연산, concat 메서드가 있다. 이 네 가지의 차이점을 Test를 통해서 알아보고자 한다. 아래는 테스트 코드와 코드를 통해 테스트한 결과이다. class Test { static int count = 100000; public static void main(String[] args){ testStringBuilder(); testStringBuffer(); testConcat(); testAdd(); } static void testStringBuilder() { long startTime = System.currentTimeMillis(); StringBuilder builder = new StringBuilder(..
- 비동기 : 하나의 요청이 모두 처리되기를 기다리는 것이 아니라 처리되지 않더라도 제어권을 다음 요청에 넘기는 것을 비동기라 한다. - 제약사항 : 1. public 한 메소드에만 써야한다. 2. 같은 클레스 안에서 @Async를 적용한 메소드를 사용하면 작동하지 않는다. 3. return Type이 void이거나 Future객체를 사용해야 한다. - @Async를 사용하기 위한 설정@EnableAsyncpublic class AppConfig implements AsyncConfigurer {@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.s..
- replaceAll에 정규표현식을 사용해서 이미지의 경로를 String에 넣으려고 할 때 separator가 사라지는 이슈가 발생했다. 실행 코드 : separator.replaceAll(separator, "image" + separator + "default.jpg"); 위와 같이 실행하면 아래와 같이 나온다. 결과 : imagedefault.jpg 검색결과 Windows의 Separator는 역슬레시이고 정규표현식에서 역슬레시 두 개를 역슬레시 하나로 인식하고 자바 또한 동일하게 인식하기 때문에 일어나는 이슈였다. 그래서 하나의 String값으로 가지고 있던 이미지의 경로를 split을 통해 경로와 이름으로 분리하여 separator를 두번 사용 하려고 했다. 실행 코드 : separator.s..
- 내가 경험한 exception 모음 - java.lang.exceptionininitializererror : 객체를 생성할 때 발생하는 exception - org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'common': Bean with name 'common' has been injected into other beans [userServiceImpl] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do n..
- 가변 인수 자바5에서 추가된 기능으로 메소드에 동일한 타입의 파라미터의 숫자가 고정적이지 않을 때 사용된다. - 가변 인수를 사용한 메소드 void print(String... strs){ for(String str : strs){ System.out.println(str); } } - 사용법 * 가변 인수를 사용한 메소드에 들어가는 파라미터는 배열로 컴파일되어 들어간다. * 그러므로 배열을 파라미터로 넘겨도 같은 결과를 나타낸다. print("a"); print("a", "aa"); print("a", "aa", "aaa"); print("a", "aa", "aaa", "aaaa"); print("a", "aa", "aaa", "aaaa", ······); String[] strs = {"a", "..
- 인터페이스(interface) 1. 추상 메소드와 상수만을 가질 수 있다. 2. 모든 메소드는 public abstract가 자동으로 붙기 때문에 생략이 가능하다. 3. 모든 상수는 public static final이 자동으로 붙기 때문에 생략이 가능하다. 인터페이스는 클레스가 가져야 하는 규약만을 정의하고 인터페이스를 상속받는 클레스는 인터페이스에 정의 되어있는 모든 메소드를 정의 해야 한다. 즉 인터페이스는 빈통을 만들고 클레스가 그 빈통을 채우는 형식이다. 사용법은 아래와 같다. interface TestI { int a = 10; // public static final int a = 10;과 같다 int add(); // public abstract int add();와 같다. } 인터페이..