앞선 11장에 자료구조 내용이 존재하지만, 이는 코딩테스트 수준이 어느정도 쌓여 자료구조로 들어갈때 다시 복습하도록 하겠다 . 코테를 파이썬으로 사용할 예정이라, 혼동을 막기 위함이다.
1. Generic
컴파일시 타입을 체크해줌 -> 안정성을 높여줌(형 안맞을시 compile부터 error)
형변환의 번거로움 줄여줌
Class Box<T> {
T item ;
void SetItem(T item) {this.item = item ;}
T getItem () {return item ;}}
생성시는 Box<String> b = new Box<String> () ;
-> string type 변수를 가지는, box class .
(한번 들어간 type과 다른 type의 객체는 추가될 수없다. )
들어올수 있는 변수들의 타입을, 제한한 예시이다.
static Juice makeJuic(FruitBOx<? extends Fruit> box{}시, 여러 type을 대입가능하고
<? extends T>, <? super T> 등과 같이 제한을 할 수도 있다.
Box<Object> objBox = null; // objBox = (Box<Object>)Box로
type간 형변환시 경고가 발생한다.
2.Enum
sql 공부시에, 성별등을 enum형태 변수로 저장했던 것을 기억하자 .
즉 열거형(enum)은 관련된 상수들을 같이 묶어둔 것이다.
enum Kind {Clover,Heart,DIa,Spade} 등.
Kind.Dia 등을 사용할 수 있다.
사용하는 방식은 DIRECTION dir 이 DIRECTION.EAST이 된다-> 객체가 주어진 것중 한개의 값을 가진다.
열거형의 생성자는 private라는 점에 주의하자. 객체 생성이 불가능하다.
즉 ,enum은?
-> 이를 통해 type에 강한 제약을 두며, 안전성 도 증가된다
public enum Season {
SPRING,
SUMMER,
AUTUMN,
WINTER
}
public static void main(String[] args) { // 계절을 나타내는 변수
Season currentSeason = Season.SUMMER; // switch
문을 사용하여 계절에 따른 동작 수행 switch (currentSeason) {
case SPRING: System.out.println("꽃이 피는 계절");
break;
case SUMMER: System.out.println("덥고 화창한 계절");
break;
이런 식으로 안전하게 객체가 최소한의, 강한 제약의 변수를 지니게 설정함으로써, 오류를 방지한다.
public enum MyEnum {
A("HI"),
B("HELLO"),
C("WORLD");
private final String message;
MyEnum(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
MYENUM이 A가 되고 -> 지정시 . 그 A는 내부변수로 message를 가진다.
3. @에너테이션
지금 이 메서드가 무엇인지를 알린다
@Test -> 이 메서드는 test 대상임을 프로그램에 알린다.
@Override ->
오버라이딩을 올바르게 했나 컴파일러가 체크하게 한다.
@Deprecated ->
앞으로 사용하지 않을 필드, 메소드 앞에 붙인다.
@FunctionalInterface -> 컴파일러가 함수형 인터페이스가 올바르게 작성되었나 체크
@SupressWarnings-> 머신러닝을 기억하자. 경고메세지가 나오지 않게 억제한다.
메타 에너테이션이란 개념이 있다.
에너테이션을 위한 에너테이션이다.
@Target ({type,field..}) -> 적용대상, 유지기간을 지정한다
@Retention (RententationPolicy.RUNTUME) -> 실행시에 사용가능한 정책은 runtime이다.
@Repetable(Todos.class) -> TODO어노테이션이 반복 사용 가능.
@interface jihyukannotation( int count() ; String testedBy () ) 등으로, 컴파일시 체크할 내용을 내가 직접 정의해서 만들어 쓸 수 있다 .
@Annotiation이라는 어노테이션도 있고, 이는 object, enum처럼 모든 사용의 조상.
하지만 쓰거나 implements나 extends등을 불가능하다.
내가 생성할때 주의할점 .
** 생각한 점 **
자바에서의 어노테이션의 개념은, 이것이 맞는지 안맞는지를 확인하는 용도의 개념이 강한 것 같다.
허나 spring을 공부하면, 어노테이션을 붙이는 것 만으로도 알아서 body가 생긴다거나
(@RequestBody) 여러가지 기능등이 추가되는 기억이 난다.
검색한 결과 어노테이션의 뜻이 해당 메소드 혹은 class가 무엇인지를 내부적으로 알려주는 것이라고 생각하면 ,스프링은 그것 위에서 어떤 행동을 할지 까지를 framework로 구현한 형태라는 결론을 내렸다.
'자바 , 기타 공부 > 자바 기초.1.04까지만' 카테고리의 다른 글
쓰레드, 프로세스 (2) | 2023.12.28 |
---|---|
기초 3장 - > 예외처리 , 기타 class (1) | 2023.12.27 |
기초 2장 -> 객체 지향 (1) | 2023.12.26 |
기초 1장 (0) | 2023.12.26 |