static이란?
static은 한글로 번역하면 정적인, 움직임이 없는, 고정된 의미를 가지고 있다.
자바 외 여러 프로그래밍 언어에서는
static
이라는 키워드가 존재하는데, 주로 사용하는 의미는 공유된 메모리의 영역을 사용하기 위해서 일 것이다.그 무언가는 block 이나 variable이 될 수 있고 method가 될 수 있고 class도 될 수 있다.
static 으로 선언한 코드는 메모리에 static 영역에 올라가게 되는데 이렇게 되면 동적 메모리의 할당 heap 영역이나 변수의 stack 영역에 그 만큼 여유 공간이 생기기 떄문에 Memory Management 입장에서는 꽤나 좋은 선택지가 될 수 있다.
또한 정적 메서드로 만들면 클래스를 메모리에 로드하는 시점에 메서드가 결정되므로 인스턴스를 만들지 않아도 된다는 장점이 있다.
이런 이유로 정적 메서드는 주로 Input/Output 이 명확한 functinal한 util 혹은 static constructor로 사용되고 한다.
하지만 단점은 존재한다.
바로 프로그래밍에서 공유의 고질적인 문제인 공유 자원에 따른 race condition, mutex, locking 등이 있다.
단위테스트
- 단위 테스트의 핵심은 바로 isolation 이다.
- 즉 내가 테스트하고자 하는 대상인 sut(System Under Test)를 고립시켜 테스트 대상이 행위할 수 있는 것 자체에 집중할 수 있는 테스트를 의미한다.