OverviewJSON 형태의 데이터를 java에서 활용할 수 있도록 데이터 타입을 변환해주는 기능build.gradledependencies { implementation group:'com.fasterxml.jackson.core', name:'jackson-databind', version:'2.12.3'}readValue()Text JSON → Object, JSON 데이터를 Java 객체로 역직렬화하는 데 사용Object Mapper는 객체의 default 생성자가 필요//json = {"name":"KKK","age":34,"cars":[{"name":"K5","car_number":"0161","TYPE":"SUV"},{"name":"K7","car_number":"1111","TYPE":"..
Functional Programming 선언형 프로그래밍 (Declative Programming) What to do? 무엇을 해야 하는가? 일급객체로서의 함수 -> 함수를 객체로 표현 역할에 충실한 코드 -> 가독성, 유지 보수, 안정성, 확장성 패러다임의 전환 -> Stream, Optional 일급객체 First-Class Object 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 인자로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다. Functional Interface 하나의 abstract method만을 가지는 인터페이스 (Single Abstract Method Interface) 매개변수 하나 Function..
람다식 함수형 프로그래밍을 구현하는 방식 클래스를 생성하지 않고 함수의 호출만으로 기능 수행 변수처럼 사용 (자료형 기반, 매개변수로 전달, 메서드의 반환값) 이름이 없는 함수 (Anonymous Function) () -> {}//파라미터가 없으며 void를 반환 () -> "Text"//파라미터가 없으며 문자열을 반환 () -> {return "Text";}//파라미터가 없으며 문자열을 반환 (Integer i) -> {return "Text" + i;}//파라미터가 있으며 문자열을 반환 (List list) -> list.isEmpty()//불리언 표현식 () -> new Apple(10)//객체 생성 (Apple a) -> { System.out.println(a.getWeight());//객체에..
Temlpate Method 추상 메서드나 구현된 메서드를 활용하여 전체의 흐름(시나리오)를 정의해 놓은 메서드 final로 선언하여 재정의 할 수 없게 함Template Method Pattern 디자인 패턴의 일종 프레임워크에서 많이 사용되는 설계 패턴 추상클래스로 선언된 상의 클래스에서 추상메서드를 이용하여 전체 구현의 흐름을 정의하고 구체적인 각 메서드 구현은 하위 클래스에 위임 하위 클래스가 다른 구현을 해도 템플릿 메서드에 시나리오 대로 수행됨 public abstract class Car{ public abstract void drive(); //하위 클래스에서 구현 public abstract void stop(); public void start(){ //공통 로직 System.out.p..
추상클래스 (Abstract Class) 추상메서드가 없거나 선언된 클래스 인스턴스를 생성할 수 없다. 자손클래스마다 다르게 구현될 것으로 예상되는 메서드를 추상메서드 선언 추상클래스를 상속받는 자손클래스에서 추상메서드를 구현 단일상속 is a kind of 인터페이스 (Interface) 추상메서드, 상수, defalut method만 선언 (생성자 X, 접근제한자 private, protected X) 인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적 정해진 목적에 맞게 구현하도록 표준을 제시하는데 사용 서로 관련이 없는 클래스에서 공통적으로 사용하는 방식이 필요하지만 기능을 각각 구현 다중상속 can do this 인터페이스를 이용한 다형성 인터페이스 타입의 변수로 자손클래스의 인스턴스를 ..
Java Reflection 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들을 접근할 수 있도록 해주는 Java API Java Reflection은 Java 프로그램에서 클래스의 메타데이터를 동적으로 검사하고 조작하는 기능을 제공합니다. Reflection을 사용하면 실행 중에 클래스의 필드, 메서드, 생성자 등을 검사하고 호출할 수 있으며, 새로운 객체 인스턴스를 생성하거나 필드 값을 읽고 쓸 수도 있습니다. 클래스 정보 검사: Reflection을 사용하여 클래스의 이름, 패키지, 상위 클래스, 인터페이스, 필드 및 메서드 등의 정보를 검사할 수 있습니다. 동적 객체 생성: Reflection을 사용하여 클래스의 생성자를 호출하여 새로운 객체 인스턴스를 생성할 수 있습니다...

데코레이터 패턴 객체에 추가적인 요건을 동적으로 첨가한다. (구성과 위임을 통해) 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다. 데코레이터 패턴에서는 구상 구성요소를 감싸주는 데코레이터들을 사용한다. 데코레이터 클래스의 형식은 그 클래스가 감싸고 있는 클래스의 형식을 반영한다. (상속, 인터페이스 구현을 통해 자신이 감쌀 클래스와 같은 형식을 가지게 된다.) 데코레이터에서는 자기가 감싸고 있는 구성요소의 메소드를 호출한 결과에 새로운 기능을 더함으로써 행동을 확장한다. 구성요소의 클라이언트 입장에서는 데코레이터의 존재를 알 수 없다. 데코레이터 패턴을 사용하면 자잘한 객체들이 매우 많이 추가될 수 있고, 코드가 복잡해질 수 있다. public abstrac..
멀티스레드 환경에서 여러 스레드가 동시에 공유 자원을 점유하려고 할 때 발생. 해결 방법 : AtomicType, volatile, synchronized 사용 http://egloos.zum.com/ryukato/v/1179260 안전하게 생성자 작성하기 (Multi-threads 대비) 안전하게 생성자 작성하기 (Multi-threads 대비) (원문: Java theory and practice: Safe construction techniques)[ht egloos.zum.com