Leeyebin의 블로그

[JAVA]코드 효율성 본문

프로그래밍/JAVA

[JAVA]코드 효율성

안되면될때까지 2017. 5. 22. 14:57

제네릭(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