Leeyebin의 블로그
[JAVA]코드 효율성 본문
제네릭(Generic)
- 1.5 배포판에서 추가
- 타입캐스팅에 의한 RuntimeException 방지 목적
- 컴파일 레벨에서 타입캐스팅 오류를 감지
- 좀더 안전한 프로그램 개발이 가능
- 코드의 복잡성이 증가
but 무조건 강제하지는 않는다.
이유는?
과거에 Generic이 없던 시절에 있던 라이브러리들 등도 있기 때문에 강제하지 않음. 하지만 앞으로는 제네릭을 최대한 활용하는 것이 좋다.
어노테이션 @SuppressWarnings를 사용하면 warning을 무시할 수 있다.
List 타입과 List<Object> 타입의 차이점은?
Wildcard Generic Type
when?
- 제네릭 타입을 사용하고 싶지만 실 타입 매개변수를 모를 때
- 어떤 타입이든 괜찮을 때
how?
- 실제 타입 대신 "?"를 사용한다.
<?> //모든 타입 허용
<? super 특정클래스> //특정클래스의 상위 클래스만 허용
<? extends 특정클래스> //특정클래스의 하위 클래스만 허용
q1)
public List<? extends Map> method(); 리턴 가능한 타입은?
HashMap 등 Map의 하위 클래스
타입 매개변수
- JDK에서 적용된 Collection을 Generic으로 사용하는 것은 쉽지만 직접 만들어야 할 경우 상대적으로 어렵다.
- 코드상에 존재하는 모든 Object를 타입 매개변수로 변환해야 한다.
- 상황에 따라 논리적으로 타입 매개변수를 제공하고 있다.
- 컴파일에 제한은 없으나 관례상 제공되는 타입 매개변수를 사용하는 것을 권장한다.
- E - Element / K - Key / N - Number / T - Type / V - Value
열거형(Enum)
- java 1.5 버전에서 열거형(Enumerated Type)이라는 특수한 형태의 클래스가 추가되었다.
- 프로그램 내부의 상수값을 정의하는 코드를 대체하는 용도로 사용되는 타입이다.
- 일종의 Class이므로 멤버변수, 상수, 메서드를 가질 수 있다.
- Object 객체를 상속하고 있다.
- Enum은 불변객체이다.(ThreadSafe하다! / 멀티쓰레딩베이스로 개발하려면 쓰레드세이프하게 짜야하고, 상태를 갖지 않게 하려면 불변객체로 만들어야한다. Enum은 대표적인 불변객체)
- Enum객체의 생성자를 이용해서 속성들도 관리할 수 있다.
사용하면 좋은점.
equals에 사용하기에도 좋다.
Enum사용
참고 : https://crunchify.com/why-and-for-what-should-i-use-enum-java-enum-examples/
일반적인 클래스와 Enum의 차이점
- Enum은 불변 객체
주석(Annotation)
Naming Pattern
- 과거에는 특별한 처리를 위해 정보가 필요할 경우 메서드명이나 클래스명의 Full-Name이나 Prefix 등의 문자열을 약속하여 사용하였다.
ex) 과거 Junit은 테스트 케이스를 작성할 때 메서드명이 반드시 "test"로 시작해야 했다. testUserService, testLoginService
- 코딩시 오타에 의해 생기는 문제
- 예약된 특정 Naming을 사용 못하는 문제
- 컴파일러 레벨에서 컴파일 오류를 알 수 없는 문제
Annotation
- Java 1.5에 Annotation이라는 Spec이 추가되었다.
- "주석"이라고 번역되지만 "메타데이터"라고 이해하는 것이 좋다.
- Annotation은 단순히 어떠한 설명을 넘어서 그 이상의 일을 할 수 있다.
- Annotation에 구현된 정보에 따라 Business Logic에는 영향을 주지 않고 다양한 처리를 하는 것이 가능하다.
- 가독성이 좋아지고 Business Logic과 무관한 복잡한 정보를 처리하는 로직을 숨길 수 있다.
Built-in Annotation
- JDK에서 기본적으로 제공하는 Annotation이 존재한다.
- ex) @Override, @Deprecated, @SuppressWarings, @SafeVarargs, @FunctionalInterface
Meta Annotation
- Custom Annotation을 개발하기 위한 Annotation이 존재한다.
- ex) @Retention: 동작범위 / @Decumented : JavaDoc 문서화 여부 / @Target : 적용되는 속성 범위 / @Inherited : 상속여부 / @Repeateable : 반복적인 선언(Array)
'프로그래밍 > JAVA' 카테고리의 다른 글
[JAVA] 객체지향 (0) | 2017.06.05 |
---|---|
[JAVA]SuppressWarnings (0) | 2017.05.22 |
[JAVA] 파일 이름 변경하기 (0) | 2017.01.15 |
[JAVA]VO 정렬하기 (0) | 2017.01.03 |
[JAVA]ArrayList, Array (0) | 2016.07.16 |
Comments