- 리터럴( Literal ) 이란?
1. 사전적인 의미로 '문자 그대로' 라는 의미
2. 프로그램에서 사용하는 의미로는 숫자, 문자, 논리 값(Char, Int, Double 등)
=> 프로그램에서 사용하는 문자 그대로의 값
- JAVA에서 타입은 2가지로 나뉘는데 하나는 원시(기본) 타입(Primitive Type)과 참조 타입(Reference Type)이다.
1. 원시(기본) 타입(Primitive Type) 은 실제 데이터를 가지는 타입이다.
- 문자형
- char : 1 byte
- 정수형
- byte : 1 byte
- short : 2 byte
- int : 4 byte
- long : 8 byte
- 실수형
- float : 4 byte
- double : 8 byte
- 논리형
- boolen : 1 byte
2. 참조 타입(Reference Type) 은 참조를 위한 타입, 직접적으로 지정하는 것이 아닌 간접적(주소)으로 가리키는 타입이다.
주소를 가리키기 때문에 크기는 4 byte 를 가진다.
- 배열
- 크기 : 4 byte
- 특징
- 같은 타입만을 가짐
- 순서를 가짐
- 열거
- 크기 : 4 byte
- 특징
- 같은 타입만을 가짐
- 순서를 가지지 않음
- 클래스
- 크기 : 4 byte
- 특징
- 객체를 생성하는 객체
- 인터페이스
- 크기 : 4 byte
- 특징
- 추상 메소드만을 가지고 있고 상속을 당할 시, 그 메소드 작성을 강제함
- 원시 타입과 참조 타입의 차이점
1. 참조 타입은 객체이지만, 원시 타입은 객체가 아니다. ( 하지만 원시 타입의 Wrapper 클래스는 객체이다.)
2. 참조 타입은 Heap 메모리에 할당되지만, 원시 타입은 Stack 메모리에 할당된다.
3. 참조 타입은 시작 주소를 저장하지만, 원시 타입은 실제 값을 가진다.
- 제네릭( General ) 이란?
1. 사전적인 의미로 '일반적인'이란 뜻을 가짐
2. 프로그램에서 사용하는 의미로는 타입을 파라미터화해서 컴파일시 구체적인 타입이 결정되도록 하는 것( 다형성 )
=> 일반적인 타입형식을 가지고 있다가 외부에서 타입을 받으면 그 타입에 대해 유연하게(해당 타입으로) 대처한다.
- 제네릭을 사용하는 이유?
- 타입에 따라 여러 코드를 작성하여 사용할 필요 없이 1개의 코드 작성으로 여러 타입의 표현이 가능(다형성)
- 타입을 미리 지정하여 제한하기 때문에 컴파일 시 컴파일러가 이를 검사하는 비용이 줄어듬
- 제네릭 사용 시 유의사항
- 클래스
- 제네릭 타입의 배열은 생성이 불가하다.(선언은 가능하지만, 생성이 불가 또한 Object[]에서 형변환하여 사용은 가능)
- static 변수/메소드는 생성이 불가하다. (이유는 static은 전역변수로 선언한다는 것이므로 인스턴스 생성 전에 생성됨)
- 메소드
- 제네릭 클래스 내부에서도 정의가 가능하다 (제네릭 클래스의 타입과 제네릭 메소드의 타입은 별개로 인식된다.)
- 제네릭 와일드카드
- 사용하는 이유
- 제네릭은 하나의 타입만 허용하기 때문에 관계가 전혀 없는 다른 타입을 허용할 수 없음
=> 이를 해결하기 위해 '?'를 사용하여 모든 타입에 대해 대비하도록 함(<?>)
- 사용방법 종류
- <?> : 모든 타입을 받을 수 있다.
- <? extends T> : T와 그 하위 타입만을 받을 수 있다.(T를 상속한 하위 타입 + T)
- <? super T> : T와 그 상위 타입만을 받을 수 있다.(T에게 상속당한 타입 + T)
'JAVA' 카테고리의 다른 글
| [Spring] Security, JWT, Redis 이론 정리 (0) | 2024.02.21 |
|---|