Stream은 다양한 데이터를 다루기 위한 라이브러리이다. Stream을 이용하면 배열뿐만 아니라 Collection도 다룰 수 있다. Stream을 활용한 연산 방법은 중간 연산과 최종 연산으로 나눌 수 있다. ex) stream.distinct().sorted().forEach(System.out::println); 위 예제에서 distinct()와 sorted()는 중간 연산이고 forEach()는 최종 연산이다. 보이는 것과 같이 중간 연산은 연속해서 사용할 수 있고 최종연 산은 한 번만 가능하다. 이제 Stream의 특징을 보자 1) 일회성이다. stream.sorted().forEach(System.out::println); stream.distinct().forEach(System.out::..
toString 메서드는 객체에 대한 정의를 보여주기 위해 존재하는 메서드로 문자열을 반환한다. 이런 toString 메서드는 Object 클래스의 메서드로써 Java의 모든 클래스는 Object 클래스를 상위 클래스로 두고 있기 때문에 모든 클래스는 toString 메서드를 갖게 된다. 만약 toString 메서드를 재정의(override) 하지 않고 그냥 사용하게 된다면 아래와 같은 문자열을 반환하게 된다. getClass().getName() + '@' + Integer.toHexString(hashCode()) // 클래스의 이름 + @ + hashCode ex) Test@2e817b38 이렇게 재정의되지 않은 toString 메서드는 유의미한 내용이 나오지 않는다. 때문에 사람이 읽기 쉽고 어떤..
클로저에 대한 내용을 람다식을 활용하여 설명한다. * 람다식에 대한 설명 자바에서 클로저는 람다식이나 내부 클래스 같은 영역 안에서 외부에서 정의된 변수를 사용하는 방식을 의미한다. 즉, 람다식을 만들 때 람다식 안에서 정의한 변수나 매개 변수로 받지 않는 변수가 사용될 경우 클로저가 사용됐다고 볼 수 있다. 예시 int a = 3; (i) -> i + a; // 클로저 이렇게 클로저에서 사용된 변수를 자유 변수(free variables)라고 하며, 자유 변수는 코드 블록 안에서 정의되거나 매개 변수가 아닌데 사용되는 변수를 뜻한다. 예제 class CodeRunner { public static void main(String args[]) { int a = 3; // 자유 변수 InterfaceRam..
문자열을 비교할 수 있는 여러 방법이 있는데 이 중에서 == 연산자와 equals 메서드를 활용하는 방법 비교한다. 비교하는 내용을 작성하기에 앞서 문자열 생성 방식에 대한 설명이 필요하여 먼저 작성한다. 문자열을 생성할 수 있는 방법은 리터럴 방식과 생성자를 사용하는 방식이 있다. String str1 = "string" // 리터럴 방식 String str2 = new String("string") // 생성자 활용 방식 여기서 리터럴 방식으로 문자열을 만들 경우 같은 별도의 String Contant Pool이라는 영역에 배치되기 때문에 동일한 문자열을 생성하면 같은 주솟값을 가지게 된다. String str1 = "a"; String str2 = "a"; System.out.println(str1..
- 클래스 경로(Class Path) 컴파일 하거나 프로그램을 실행할 때 읽어올 클래스의 위치를 나열해 놓은 것이다. 클래스 경로를 나눌 때 두 가지로 나누는데 컴파일할 때는 빌드 타임 클래스 경로이고 실행할 때는 런 타임 클래스 경로이다. 빌드 타임 클래스 경로는 빌드할 때 필요한 프로그램의 코드와 프로그램에서 참조하고 있는 코드 즉 빌드하기 위해 필요한 클래스들의 경로가 들어있다. 예를 들어 인터페이스와 인터페이스를 구현한 클래스가 있다면 인터페이스가 빌드 타임 클래스 경로에 있어야 한다. 런 타임 클래스 경로는 프로그램을 실행할 때 사용되는 클래스와 프로그램을 참조하는 클래스들의 경로가 들어 있다. 예를 들어 인터페이스와 인터페이스를 구현한 클래스가 있다면 실제 구현된 코드가 런 타임 클래스 경로에..
불변 객체란 한번 생성된 후 변경할 수 없는 객체를 뜻하고 변경할 수 없기 때문에 멀티스레드 환경에서 마음 놓고 사용할 수 있다는 장점을 가졌다. 불변 객체를 만드는 방법은 아래와 같다. 1. 모든 인스턴스 변수는 private final키워드를 사용한다. 2. 인스턴스 변수를 수정하는 메서드를 제공하지 않는다. 3. 만약 객체를 return 해야 하는 경우가 생긴다면 새로운 객체를 생성하여 return 해준다. 4. 상속할 수 없게 한다. 만약 상속이 가능하다면 sub class를 통해 불변 상태가 깨질 수 있다. ( ex > public final class className {} ) 5. 인스턴스 변수로 불변 객체 또는 기본형 타입을 변수로 사용해야 한다. 가변 객체를 사용한다면 방어적 복사본을 만..
문자열을 특정 문자를 통해서 잘라내고 싶을 때 split이나 StringTokenizer를 사용한다. 사용법을 먼저 보면 split은 String의 메서드이며 String 배열을 리턴한다. String[] strArr = "aa,bb,cc".split(","); 그다음 StringTokenizer는 생성자를 통해서 객체를 만들면 된다. StringTokenizer st = new StringTokenizer("aa,bb,cc", ","); 그리고 필요한 메서드를 사용하면 된다. st.countTokens(); // 토큰의 개수 리턴 st.hasMoreTokens(); // 다음 토큰이 존재하면 true 아니면 false를 리턴 st.nextToken(); // 다음 토큰을 리턴 존재하지 않으면 NoSuc..
Spring-boot를 사용한다는 가정하에 아래와 같은 설정만 해주면된다. @Configuration @EnableWebMvc public class AppConfig extends WebMvcConfigurerAdapter { @Bean public ServletRegistrationBean h2servletRegistration() { ServletRegistrationBean registration = new ServletRegistrationBean(new WebServlet()); registration.addUrlMappings("/console/*"); return registration; } } 설정을 한 후 localhost:8080/console 로 들어가 connect하면 H2 DB에..
Mockito Framework는 목 객체를 만들어 주는 Framework로 테스트하는 데 유용하게 쓸 수 있다. 목 객체란 테스트를 진행할 때 해당 코드 외의 의존하는 객체를 가짜로 만든 것을 지칭한다. 이러한 목 객체는 테스트하고 싶은 코드에 대해서 정확하게 테스트하기 위해서 사용된다. 1. 해당 코드가 아닌 의존관계에 있는 다른 코드에서 오류가 나거나 없는 경우 2. 네트워크나 DB 연결 등 외부의 요인에 영향을 받는 경우 이제 Mockito에 대한 여러 가지 활용법을 코드로 알아보자 먼저 필요한 라이브러리를 빌드하자. (Maven) org.mockito mockito-all 1.10.19 test junit junit 4.12 test 다음은 verify에 대한 테스트 코드이다. public vo..