protected 접근 제한자
- 상속과 관련된 접근 제한자
1. 같은 패키지 : default 와 동일
2. 다른 패키지 : 자식 클래스만 접근 허용(다른 패키지 내의 클래스더라도 상속받은 클래스는 가능)
접근제한자
|
접근제한 |
적용 대상 |
접근할 수 없는 클래스 |
|
public |
클래스, 필드, 생성자, 메소드 |
없음 |
|
protected |
필드, 생성자, 메소드 |
자식 클래스가 아닌 다른 패키지에 소속된 클래스 |
|
default |
클래스, 필드, 생성자, 메소드 |
다른 패키지에 소속된 클래스 |
|
private |
필드, 생성자, 메소드 |
모든 외부 클래스 |
'JAVA Programming' 카테고리의 다른 글
| 추상 클래스 (0) | 2015.04.28 |
|---|---|
| 자동 타입 변환 (0) | 2015.04.27 |
| 어노테이션(Annotation) #2 (0) | 2015.04.23 |
| 어노테이션(Annotation) #1 (0) | 2015.04.23 |
| Getter와 Setter (0) | 2015.04.23 |
어노테이션(Annotation) #2
런타임시에 어노테이션 정보 사용하기
ㅁ 클래스에 적용된 어노테이션 정보 얻기
- 클래스.class의 어노테이션 정보를 얻는 메소드를 이용
ㅁ 필드, 생성자, 메소드에 적용된 어노테이션 정보 얻기
- 클래스.class의 당므 메소드를 이용해서
- java.lang.reflect 패키지의 Field, Constructor, Method 클래스의 배열을 얻어냄
|
리턴타입 |
메소드명(매개변수) |
설명 |
|
Field[] |
getFields() |
필드 정보를 Field 배열로 리턴 |
|
Constructor[] |
getConstructors() |
생성자 정보를 Constructor 배열로 리턴 |
|
Method[] |
getDeclaredMethods() |
메소드 정보를 Method 배열로 리턴 |
- Field, Constructor, Method 의 어노테이션 정보를 얻는 메소드를 이용
|
ex) 소스 |
|
class XXX { // 필드에 설정된 어노테이션 @Annotation -> 얻어온다. int field1; @Annotation -> 얻어온다. String fields
// 생성자에 설정된 어노테이션 @Annotation -> 얻어온다. XXX() {} @Annotation -> 얻어온다. XXX(int x) {}
// 생성자에 설정된 어노테이션 @Annotation -> 얻어온다. void method1() {} @Annotation -> 얻어온다. void method2() {} } |
ㅁ 어노테이션 정보를 얻기 위한 메소드
|
리턴타입 |
메소드명(매개변수) |
|
boolean |
isAnnotationPresent(Class<? extends Annotation > annotationClass) |
|
|
지정한 어노테이션이 적용되었는지 여부 Class 에서 호출했을 경우 상위 클래스에 적용된 경우에도 true를 리턴한다. |
|
Annotation |
getAnnotation(Class <T> annotationClass) |
|
|
지정한 어노테이션이 적용되어 있으면 어노테이션을 리턴하고 그렇지 않으면 null 을 리턴한다. Class 에서 호출했을 경우 상위 클래스에도 적용된 경우 Annotation을 리턴한다. |
|
Annotation[] |
getAnnotations() |
|
|
적용된 모든 어노테이션을 리턴한다. Class 에서 호출했을 경우 상위 클래스에 적용된 어노테이션도 모두 포함한다. 적용된 어노테이션이 없을 경우 길이가 0인 배열을 리턴한다. |
|
Annotation[] |
getDeclaredAnnotations() |
|
|
(필드, 생성자, 메소드) 직접 적용된 모든 어노테이션을 리턴한다. Class 에서 호출했을 경우 상위 클래스에 적용된 어노테이션은 포함되지 않는다. |
소스 작성
New > Annotation 클릭
'JAVA Programming' 카테고리의 다른 글
| 자동 타입 변환 (0) | 2015.04.27 |
|---|---|
| protected 접근 제한자 (0) | 2015.04.27 |
| 어노테이션(Annotation) #1 (0) | 2015.04.23 |
| Getter와 Setter (0) | 2015.04.23 |
| 패키지와 접근 제한자 (0) | 2015.04.23 |
어노테이션(Annotation) - java 1.5 이후
정의 : 프로그램에게 추가적인 정보를 제공해주는 메타데이터(metadata) 이다.
용도
- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
ex) @Override : 메소드가 재정의 되었는지 확인할 수 있다.
- SW 개발 툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공
ex) XML 설정 파일을 자동 생성하거나 배포를 위한 JAR 압축 파일을 자동 생성할 수 있다.
- 실행시(Runtime) 특정 기능을 실행하도록 정보를 제공
ex) 객체가 애플리케이션 내부에서 해야할 역할을 정의할 수 있다. Servlet, Controller ...
어노테이션 타입 정의
- 소스파일 생성 : AnnotationName.java
- 소스 파일 내용
public @interface AnnotationName { }
어노테이션 타입 적용
@AnnotationName
어노테이션 엘리먼트(element) 멤버
- 어노테이션을 코드에 적용할 때 외부의 값을 입력받을 수 있도록 하는 역할
- 엘리먼트 선언
public @interface AnnotationName {
타입 elementName() [ default 값 ];
......
}
※ 엘리먼트의 타입은 기본타입과 참조타입을 모두 사용할 수 있다.
public @interface AnnotationName {
String elementName1();
int elementName2() default 5;
}
- 어노테이션 적용시 엘리먼트 값을 지정하는 방법
@AnnotationName(elementName1 = "값", elementName2 = 3); 또는
@AnnotationName(elementName1 = "값");
기본 엘리먼트 value
public @interface AnnotationName {
String value(); // 기본 엘리먼트 선언
int elementName() default 5;
}
* 어노테이션을 적용할 때 엘리먼트명을 생략가능
@AnnotationName("값")
@WebServlet("/main")
public class MainServlet { ... }
* 두개 이상의 속성을 기술할 때에는 value=값 형태로 기술
@AnnotationName(value="값", elementName=3);
@WebServlet(value="/main")
public class MainServlet { ... }
어노테이션 적용 대상
- 코드 상에서 어노테이션을 적용할 수 있는 대상
- java.lang.annotation.ElementType 열거 상수로 정의되어 있음
|
ElementType 열거 상수 |
적용 대상 |
|
TYPE |
클래스, 인터페이스, 열거 타입 |
|
ANNOTATION_TYPE |
어노테이션 |
|
FIELD |
필드 |
|
CONSTRUCTOR |
생성자 |
|
METHOD |
메소드 |
|
LOCAL_VARIABLE |
로컬 변수 |
|
PACKAGE |
패키지 |
- 어노테이션 적용 대상 지정 방법
* @Target 어노테이션으로 적용 대상 지정
* @Target 의 기본 일리먼트인 value의 타입은 ElementType 배열
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
public @interface AnnotationName {
}
소스 예제
@AnnotationName
public class ClassName {
@AnnotationName
private String fieldName;
//@AnnotationName (X)
public ClassName() {}
@AnnotationName
public void methodName() {}
}
어노테이션 유지 정책
- 어노테이션 적용 코드가 유지되는 시점을 지정하는 것
- java.lang.annotation.RetentionPolicy 열거 상수로 정의되어 있음
|
RetentioinPolicy 열거 상수 |
설명 |
|
SOURCE |
소스(.java)상에서만 어노테이션 정보를 유지한다. 소스 코드(.java)를 분석할 때만 의미가 있으며, 바이트 코드 파일(.class)에는 정보가 남지 않는다. |
|
CLASS |
바이트 코드 파일(.class)까지 어노테이션 정보를 유지한다. 하지만, *리플렉션을 이용해서 이노테이션 정보를 얻을 수 없다. |
|
RUNTIME |
바이트 코드 파일까지 어노테이션 정보를 유지하면서 리플렉션을 이용해서 런타임에 어노테이션 정보를 얻을 수 있다. |
* 리플렉션 : 런타임에 클래스의 메타 정보를 얻는 기능
- 클래스가 가지고 있는 필드, 생성자, 메소드, 어노테이션의 정보를 얻을 수 있다.
- 런타임시에 어노테이션 정보를 얻으려면 유지 정책을 RUNTIME 으로 설정해야 함.
- 유지 정책 지정 방법
@Retention 어노테이션으로 유지 정책을 지정
@Retention의 기본 엘리먼트인 value의 타입은 RetentionPolicy
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationName { }
'JAVA Programming' 카테고리의 다른 글
| protected 접근 제한자 (0) | 2015.04.27 |
|---|---|
| 어노테이션(Annotation) #2 (0) | 2015.04.23 |
| Getter와 Setter (0) | 2015.04.23 |
| 패키지와 접근 제한자 (0) | 2015.04.23 |
| non-static 멤버와 static 멤버의 특징 (0) | 2015.04.23 |
Getter와 Setter
1. 클래스를 선언할 때 필드는 일반적으로 private 접근 제한을 한다.
- 읽기 전용 필드가 있을 수 있다. - Getter의 필요성
- 외부에서 엉뚱한 값으로 변경할 수 없도록 한다 - Setter의 필요성
2. Getter
- private 필드의 값을 리턴하는 역할을 한다.
- getFieldName() 또는 isFieldName() 메소드를 말한다.
3. Setter
- 외부에서 주어진 값을 private 필드 값으로 수정한다.
- setFieldName(타입 변수) 메소드를 말한다.
※ 필드를 읽기전용으로 설정하려면 필드에 대한 Getter 만 생성하고 Setter 는 생성하지 않는다.
Getter와 Setter 자동 생성 방법
1. 필드 생성
2. Source > Generate Getters and Setters : 단축키 Alt + Shift + S
'JAVA Programming' 카테고리의 다른 글
| protected 접근 제한자 (0) | 2015.04.27 |
|---|---|
| 어노테이션(Annotation) #2 (0) | 2015.04.23 |
| 어노테이션(Annotation) #1 (0) | 2015.04.23 |
| 패키지와 접근 제한자 (0) | 2015.04.23 |
| non-static 멤버와 static 멤버의 특징 (0) | 2015.04.23 |
윈XP와 윈 7의 NPKI 경로가 다릅니다.
윈7
C:\Users\User\AppData\LocalLow\NPKI
'Life' 카테고리의 다른 글
| 현타(현실 자각 타임) (2) | 2015.07.20 |
|---|---|
| 인터넷 신조어 (0) | 2015.07.20 |
| Demi_Lovato-Skyscraper (0) | 2015.06.26 |
| Summer Wine - Nancy Sinatra & Lee Hazlewood (0) | 2015.06.26 |
| OK 캐쉬백 우편으로 보낼때 (0) | 2015.04.23 |



