Programing/Java 29

Java Object 비교 ==

Long, Integer, String 등과 같은 Object를 비교를 할때에는 아래와 같은 방식으로 하면 원하는 작동이 나오지 않는다. Long a = 1L;Long b = 1L; if( a == b ) System.out.println("a==b")객체에서의 ==은 referecne비교, 따라서 a, b는 서로 다른 reference를 가지고 있기 때문에 false로 나온다. Long a = 1L;Long b = 1L; if( a.equals(b) ) System.out.println("a==b")equals 를 사용하여 object를 같은지 유무를 비교를 한다.a가 null 인경우에는 null 포인트 에러가 발생이 되기 때문에 방어 코드가 필요하다.String 인 경우에는 StringUtils의 i..

Programing/Java 2018.07.25

Spock Framework을 이용한 Unit test 작성

Spock Framework을 이용한 Unit test 작성Java Application을 개발하면서 Unit Test를 작성을 할때 jUnit과 Mockito를 이용하여 작성을 할수도 있지만 테스트 코드만 다른 코드로 간다면 좀더 쉽게 Unit Test를 작성을 할수 있다. 그 중에 Groovy를 언어를 이용한 Test 코드 작성에 대해 알아보자. Reference- http://spockframework.org/spock/docs/1.1/index.html gradleapply plugin: "groovy" .... compile "org.codehaus.groovy:groovy-all:2.4.15"testCompile "org.spockframework:spock-core:1.1-groovy-2.4..

Programing/Java 2018.06.25

Java Stream을 이용한 Inner Join / Left Join 기능

Java Stream을 이용한 Inner Join/Left Join 기능 - NoSQL Database를 사용하다보면 Join 기능이 없기 때문에 Application에서 Join 기능을 만들어야 된다.- Java Stream을 이용하여 손쉽게 inner join/left join을 할수 있게 구현을 할수 있다.- 저장되어 있는 DB가 서로 다른 경우에도 inner join/ left join 가능하다. ex) mysql에서 유저 정보를 가지고 와서 redis에 있는 주문 정보를 조회할수 있는 구조에서의 join 기능을 구현, batch job을 통한 데이터 추출 등..Data Class@Getter@AllArgsConstructor(staticName = "create")static class User..

Programing/Java 2018.06.18

Lombok 상위클래스 필드를 이용한 객체 생성 방법

Lombok 상위클래스 필드를 이용한 객체 생성 방법데이터 객체가 상속관계에 있을 경우 lombok의 @Builder 어노테이션을 아래와 같이 이용하면 객체 상위에 필드도 지정할수가 있다.@AllArgsConstructorpublic class Parent { private String a;} public class Child extends Parent { private String b; @Builder private Child(String a, String b){ super(a); this.b = b; }}Child.builder().a("testA").b("testB").build()Referencehttps://projectlombok.org/features/Builder

Programing/Java 2017.08.06

Lombok

Lombok개요java 언어로 프로젝트를 하다보면 반복적인 작업들이 있다. Getter/Setter, 생성자나 File I/O에서의 Stream 객체 close 등등.. 이러한 반복적인 작업들을 깔끔하게 어노테이션(Annotation)을 이용하여 처리할수 있는 라이브러인 롬복(Lombok)에 대해 알아보자.Libary importMaven org.projectlombok lombok 1.16.18 provided Gradlerepositories { mavenCentral()} dependencies { compileOnly 'org.projectlombok:lombok:1.16.18'}intelliJ를 IDE를 사용한다면 설정중에 Processing Annotation 옵션 및 Lombok Plugin..

Programing/Java 2017.07.15

Guava Java 라이브러리

Guava Java 라이브러리Guava Java 라이브러리에서 자주 사용되는 기능을 정리해보자.EventBusPublish/Subscribe 방식의 이벤트 처리 방식AsyncEvnetBushttps://google.github.io/guava/releases/17.0/api/docs/com/google/common/eventbus/AsyncEventBus.htmlSample Code// Class is typically registered by the container. class EventBusChangeRecorder { @Subscribe public void recordCustomerChange(ChangeEvent e) { recordChange(e.getChange()); }} // somew..

Programing/Java 2017.07.02

Minor gc/Major gc/Full gc

Minor GC, Major GC, Full GCGCMinor GCMajor GCFull GCJVM의 Heap 메모리 구조Eden/Young SpaceSurvivor 1Survivor 2Tenured/Old SpaceMinor GCMinor GC는 새로운 객체에 대해서 작동이 된다.Minor GC는 JVM이 새로운 객체를 생성할때 메모리가 부족하다면 발생되는 GCEden 영역이 가득차게 되면 Minor GC가 발생된다.Minor GC가 발생되었을때 Tenured 영역의 객체 생성은 무시된다.일반적으로 알려진 내용과 달리 Minor GC가 발생될때도 Stop-The-World 상태이다Major GC와 Full GC의 차이Major GC : Tenured 영역대부분의 경우에는 Minor GC가 발생되고 그 ..

Programing/Java 2017.06.27