본문으로 바로가기

google guava(구아바)란?

category Language/JAVA 2018.03.09 13:21

google guava(구아바)란?


구글에서 만든 자바로 클린한 코드를 작성 하기 위한 구조들을 만들어 놓은 라이브러리 이다. 대표적인 클래스는 AbstractService등이 있다.


AbstractService

doStart()와 doStop()요청을 핸들링 할 수 있는 service를 구현하는 기본 클래스. 요청한 곳에 notifyStarted()와 notifyStopped() 콜백으로 응답을 준다. AbstractService 클래스를 상속한 서브 클래스는 반드시 스레드를 수동으로 관리 해주어야 한다. 싱글 스레드로 실행을 하고 싶다면 AbstractExecutionThreadService를 고려해보면 된다.


AbstractService를 상속 받으면 아래와 같이 doStart()와 doStop()을 오버라이딩 하게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import com.google.common.util.concurrent.AbstractService;
 
public class AbstractEngine extends AbstractService {
 
    @Override
    protected void doStart() {
        
    }
 
    @Override
    protected void doStop() {
 
    }
}
cs


end.



Preconditions.checkNotNull()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package guava;
 
import com.google.common.base.Preconditions;
import org.junit.Test;
 
public class CheckNotNullTest {
 
    private String getMessage(String message) {
        Preconditions.checkNotNull(message);
        return message;
    }
 
    @Test(expected = NullPointerException.class)
    public void nullException() {
        getMessage(null);
    }
 
    @Test
    public void checkNotNull() {
        System.out.println(getMessage("hello"));
    }
}
 
cs

method를 호출 했을 때 Preconditions.checkNotNull(message);가 호출 되면 message가 null일 때 exception을 낸다.
null이 아니면 아래 명령들을 수행 한다.
if(null){} 이 블럭 역할을 한다고 보면 된다.


MoreObjects.ToStringHelper

Object를 string으로 만들 때 사용한다. Object.toString()보다 좋다. Object.toString()은 메모리 주소가 튀어나오는 경우와 String을 만들어낼 때 +로 연결 해주는 등 불편하지만 MoreObjects.ToStringHelper를 쓰면 비교적 간단하게 원하는 스트링을 만들 수 있다.

로그를 찍을 때 좋다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 리턴 "ClassName{}"
MoreObjects.toStringHelper(this)
    .toString();
 
// 리턴 "ClassName{x=1}"
MoreObjects.toStringHelper(this)
    .add("x"1)
    .toString();
 
// 리턴 "MyObject{x=1}"
MoreObjects.toStringHelper("MyObject")
    .add("x"1)
    .toString();
 
// 리턴 "ClassName{x=1, y=foo}"
MoreObjects.toStringHelper(this)
    .add("x"1)
    .add("y""foo")
    .toString();
// 리턴 "ClassName{x=1}"
MoreObjects.toStringHelper(this)
    .omitNullValues()
    .add("x"1)
    .add("y"null)
    .toString();
}
cs




.omitNullValues()

값이 null이면 보여주지 않는다.
아래 소스코드에서 "age"가 null인데 출력을 해보면 "age"가 아얘 없다.
1
2
3
4
5
6
7
8
9
10
11
12
String type = "hello";
String body = "nello";
String age = null;
 
String message = com.google.common.base.MoreObjects.toStringHelper("")
        .omitNullValues()
        .add("type", type)
        .add("body", body)
        .add("age", age)
        .toString();
 
System.out.println(message);
cs
결과
{type=hello, body=nello}


.firstNotNull(first, second)
두개의 값을 받아서 둘중에 null이 아닌걸 리턴한다.
둘다 null이면 


end.




댓글을 달아 주세요