멋진 테스트 코드를 작성하도록 돕는 AssertJ 라이브러리에 대해서 알아봅시다.

AssertJ의 장점

  • 메소드 체이닝을 지원하기 때문에 좀 더 깔끔하고 읽기 쉬운 테스트 코드를 작성할 수 있습니다.
  • 개발자가 테스트를 하면서 필요하다고 상상할 수 있는 거의 모든 메소드를 제공합니다.

라이브러리 의존성 설정

Java8 이상 기반 프로젝트는 3.x 버전을, Java7 이하 기반 프로젝트는 2.x 버전을 사용하셔야 합니다.

Gradle

  • Java8
    testCompile 'org.assertj:assertj-core:3.6.2'
  • Java7
    testCompile 'org.assertj:assertj-core:2.6.0'
    

Maven

<dependency>
  <groupId>org.assertj</groupId>
  <artifactId>assertj-core</artifactId>
  <!-- use 2.6.0 for Java 7 projects -->
  <version>3.6.2</version>
  <scope>test</scope>
</dependency>

AssertJ 메소드 임포트

다음과 같이 정적 임포트를 하면 AssertJ의 다양한 API를 클래스 이름없이 바로 사용할 수 있습니다.

import static org.assertj.core.api.Assertions.*;

테스트 대상 지정하기

모든 테스트 …

Read More

출처 : http://www.daleseo.com/lombok-popular-annotations/

Lombok 라이브러리에서 제공하는 어노테이션 중에서 자주 사용되는 어노테이션 위주로 살펴보도록 하겠습니다.

접근자/설정자 자동 생성

제일 먼저 살펴볼 어노테이션은 @Getter와 @Setter 입니다.
아마 Lombok에서 가장 많이 사용되는 어노테이션일 텐데요.
예를 들어, xxx라는 필드에 선언하면 자동으로 getXxx()(boolean 타입인 경우, isXxx())와 setXxx() 메소드를 생성해줍니다.

@Getter @Setter
private String name;

위와 같이 특정 필드에 어노테이션을 붙여주면, 다음과 같이 자동으로 생성된 접근자와 설정자 메소드를 사용할 수 있어서 매우 편리합니다.

user.setName("홍길동");
String userName = user.getName();

또한, 필드 레벨이 아닌 클래스 레벨에 @Getter 또는 @Setter를 선언해줄 경우, 모든 필드에 접근자와 설정자가 자동으로 생성됩니다.

VO 클래스를 작성할 때 마다, 접근자와 …

Read More

출처 : http://sweeper.egloos.com/3059940

1. shared_ptr
shared_ptr의 내용은 다음 링크를 참고하기 바라며, 특히 3-9 Circular reference 챕터를 자세히 읽어보기 바란다.
(위 링크엔 shared_ptr의 circular reference에 대한 예제가 포함되어 있다)
2. weak_ptr
shared_ptr은 자신이 참조하고 있는 객체(메모리 주소)에 대해 reference counting을 함으로써, 객체의 수명에 직접적으로 관여한다.
shared_ptr 객체 하나가 소멸되더라도, 동일한 메모리 주소를 참조하고 있는 다른 shared_ptr 객체가 있으면 참조하고 있던 메모리 주소의 객체는 소멸되지 않는다.
하지만, weak_ptr은 shared_ptr을 관리하기 위한 reference count에 포함되지 않는다.
즉, shared_ptr의 객체만 참조할 뿐, shared_ptr의 reference count를 올리지 않는 것이다.
사실 weak_ptr이 shared_ptr을 참조할 때 shared_ptr의 weak reference count는 증가
Read More
출처 : http://egloos.zum.com/sweeper/v/2826435
 
1. auto_ptr
TR1이 발표되기 전까지 std::auto_ptr이 C++ Standara library의 유일한 스마트 포인터였다.
스마트 포인터의 기본적인 특성인 자신이 소멸될 때 가리키고 있는 대상에 대해 자동으로 delete 해줘 메모리 누수 걱정은 없게 작성이 되어 있다.
하지만, auto_ptr은 유일 소유권 개념이 있어서, 객체가 복사되는 순간(복사생성 또는 대입연산) 원래의 auto_ptr은 바로 NULL 처리가 되어 버린다.
class AAA;
 
// RAII 방식으로... AAA 객체 생성
std::auto_ptr<AAA> AAAObject(new AAA());
 
// 복사가 되는 순간, AAAObject는 NULL이 되고, 이제 BBBObject 만이 객체를 가리킨다.
std::auto_ptr<AAA> BBBObject(AAAObject);
 
// 역시 대입이 되는 순간, BBB는 NULL, 이제 AAA가 객체를 가리킴.
AAAObject = BBBObject;
이렇듯 괴상망측한 복사 동작으로
Read More
출처 : http://hiddenviewer.tistory.com/103
예외처리는 객체지향 프로그래밍을 지원하는 언어에서 에러를 처리하기 위한 메커니즘이다. 전통적인 절차지향
언어에서는 함수의 반환값을 통해 에러 유무를 판단하였다. 매번 반환값을 검사하는 작업은 상당히 번거롭고,
그 반환값의 의미 또한 프로그래머가 인지하기 어려운 형태여서 에러처리가 불편하였다. 반면 예외처리 방식은
예외가 발생하면 그에 대한 정보를  얻을 수 있고, 제어 흐름 또한 쉽게 이동시킬 수 있는 방식이다.  
하지만 아무리 언어차원에서 좋은 메커니즘을 제공하더라도 언제, 어떻게 사용해야하는지 모른다면 무용지물이다.
C++와 Java 언어를 처음 접했을 때에도 언제, 어디서 예외를 던지고 잡아야 하는지가 난제였다.  예외처리에 대해서
좀더 자세히 알아보자.
자바의 철학은 “잘못 만든 코드는 실행되지 않아야 한다” 는 것이다. 그래서 에러를 잡는 가장
Read More

출처 : http://www.nextree.co.kr/p3239/

일상생활에서도 기본적인 것은 고민하지 않고 습관처럼 사용하는 경우가 있다. 초급 개발자인 나에게 ‘예외(Exception)’이 바로 그런 것이었다.

처음 JAVA수업 때 강사님께 “왜 로직을 try문으로 감싸고, 또 catch(e)는 무엇인가요?”라는 질문을 한 적이 있다. 돌아온 대답은 “이렇게 안하면 에러가 나니까.”였다. 나는 이것을 안 하면 어떤 일이 벌어지는지 언제 어떻게 사용해야 하는지도 모른 채 강사님의 코드를 따라 치기 바빴다. 입사 후 공부를 하면서도 Runtime Exception과 Checked Exception은 이론 그 이상으로 활용하지 못했었다.

하지만 최근 약 4개월 반 동안 진행했던 한 프로젝트에서 수석님들께 배우며 예외(Exception)에 대해 큰 깨달음을 얻었고, 꼭 이 깨달음을 글로 남기고 싶었다. 이 글을 통해 초급 개발자들이 예외처리를 할

Read More
출처 : http://hiddenviewer.tistory.com/96

Annotation을 실제로 사용하는 예제를 알아보자.

첫번째 예제는 UseCase라는 어노테이션을 정의한다. 이 어노테이션은 id와  description이라는 값을
멤버로 갖으며 각각 기능번호와 기능에 대한설명을 나타낸다.  Password 검사와 관련된 클래스에스는 각 메소드에
UseCase 어노테이션을 사용하여 메서드들이 어떤 유스케이스를 구현하고 있는지를 표시한다.
나중에 모든 유스케이스를 구현하는 모든 메소드들이 잘 구현되었는지 확인하기 위해  UseCaseTracker 를 사용하여
어노테이션 정보를 출력한다. (코드는 Thinking in Java 4E 에 있는 예제코드를 사용하였다. )


1. UseCase 어노테이션 정의

메서드에 사용할 어노테이션이므로 @Target을 ElementType.METHOD를 설정하였고,
런타임 시에 사용되기 때문에 @Rention을 RetentionPolicy.RUNTIME 로 설정하여 class 파일에 어노테이션 정보가 남도록
지정하였다.

package net.atgame.annotation.usecase;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

Read More

출처 : http://hiddenviewer.tistory.com/88

프로그래밍을 하면서 @Override 와 @Test와 같은 어노테이션들을 많이 사용했지만,  그 중요성이나 의미를
깊이 있게 생각해보지는 못했었다.  단순히 컴파일러에게 알려주기 위한 표식정도로 생각했었다.  그런데  Spring Roo 와
Spring3.0 과 같은 최신 프레임웍들의 변화 경향을 보면,  어노테이션을 적극활용하는 쪽으로 변화되고 있다.  어노테이션을
사용하여 코드의 작성량도 한결 줄어들었다고 한다.  어노테이션들의 어떤 특성을 활용한 것일까?  어노테이션이란 뭘까?
최신 프레임웍들에 변화경향을 보기에 앞서, 어노테이션에 대해서 먼저 알아보았다.

1. Annotation 이란?
Annotation은 JEE5 부터 새롭게 추가된 문법요소이다.  사전적으로는 “주석”이라는  의미를 가지고 있으며, 의미대로
자바 코드에 주석처럼 달아 특수한 의미를 부여해준다.   이 특별한 의미는 컴파일 타임 또는 런타임에 해석될 수 있다.

 

2.
Read More
안드로이드 개발을 하면서, icon이 아직 없을 때, 단말기에서 기본으로 쓰는 아이콘들을 활용하기
android:icon=”@android:drawable/ic_menu_save”
android.R.drawable.ic_menu_save
버전 별 아이콘 모양과 이름이 적혀 있어서 좋다.
action bar icon pack을 다운 받아서 쓰기.
mac에서는 finder검색 기능을 이용해서 원하는 아이콘을 찾으면 편하다.
Read More