Nested Class
클래스 안의 클래스로서 자바 기반의 UI 처리를 할 때 사용자의 입력이나 외부의 이벤트에 대한 처리를 하는 곳에서 많이 사용된다.
Static Nested 클래스
한 곳에서만 사용되는 클래스를 논리적으로 묶어서 처리할 필요가 있을 때
public class OuterClass{ static class StaticClass{ } public OuterClass(){ } } // 객체 생성방법 OuterClass.StaticClass staticClass = new OuterClass.StaticClass();
내부 클래스
캡슐화가 필요할 때, 즉 내부구현을 감추고 싶을 때
로컬 내부 클래스
public class OuterClass{ class InnerClass{ } public OuterClass(){ } } // 객체 생성방법 OuterClass outer = new OuterClass(); OuterClass.InnerClass inner = outer.new InnerClass();
익명 내부 클래스
public interface AnonymousClass{ public void printVoid(); } public class OuterClass{ public OuterClass(){ } private AnonymousClass anonymousClass; public void setPrint(AnonymousClass anonymousClass){ this.anonymousClass = anonymousClass; } } class AnonymousClassImpl implements AnonymousClass{ public void printVoid(){ System.out.println("AnonymousClassImpl 구현"); } } // 사용법 OuterClass outer = new OuterClass(); outer.setPrint(new AnonymousClass() { public void printVoid(){ System.out.println("AnonymousClassImpl 구현"); } });
static nested 클래스의 특징으로 static의 속성을 가지고 있어 static하지 않은 변수를 사용할 수 없다. 다만, 반대의 경우 static nested 클래스는 OuterClass에서 사용이 가능하다.
어노테이션
클래스나 메소드 등의 선언시에 @를 사용한다.
- 컴파일러에게 정보를 알려준다.
- 컴파일할 때와 설치(development)시의 작업을 지정
- 실행할 때 별도의 처리가 필요할 때
자바 JDK 6 버전 이하에서 정해진 어노테이션은 3개 뿐이다.
@Override
부모 클래스에서 상속받은 메소드를 오버라이드 했음을 표현
@Deprecated
더이상 사용하지 않는다고 경고를 표현
@SupressWarnings("속성값")
컴파일러에서 경고를 보낼때, 내 스스로 문제가 없다고 판단될 때 "얘는 문제없어"라는 표현
어노테이션을 선언하기 위한 메타 어노테이션 @어노테이션("속성값")
@Target
이 어노테이션을 어떤 것에 적용할지를 선언
- ElementType.METHOD : 메소드에 선언
- ElementType.CONSTUCTOR : 생성자에 선언
- ElementType.FIELD : enum 상수를 포함한 필드 값 선언
- ElementType.LOCAL_VARIABLE : 지역 변수 선언시
- ElementType.PACKAGE : 패키지 선언시
- ElementType.PARAMETER : 매개 변수 선언시
- ElementType.TYPE : 클래스, 인터페이스, enum 등 선언시
@Retention
얼마나 오래 어노테이션을 유지할 것인가
- RetentionPolicy.SOURCE : 어노테이션 정보가 컴파일시 사라짐
- RetentionPolicy.CLASS : 클래스 파일에 있는 어노테이션 정보가 컴파일러에 의해서 참조 가능, 가상 머신에서는 사라짐
- RetentionPolicy.RUNTIME : 실행시 어노테이션 정보가 가상 머신에 의해서 참조 가능
@Documneted
해당 어노테이션은 Javadoc(API) 문서에 포함된다는 것
@Inherited
모든 자식 클래스에서 부모 클래스의 어노테이션을 사용 가능하다는 것을 선언
@interface
유저가 만든 어노테이션을 선언할 때 사용
자바 언어
자바가 추구하는 프로그래밍
- 자바는 "단순하고, 객체지향적이며, 친숙"해야 한다.
- 자바는 "견고하며, 보안상 안전"하다.
- 자바는 "아키텍처에 중립적이어야 하며 포터블"해야 한다.
- 자바는 "높은 성능"을 제공해야 한다.
- 자바는 "인터프리트 언어이며, 쓰레드를 제공하고, 동적인 언어"이다.
자바에서 필수적으로 알아야 하는 용어
- JVM : Java Virtual Machine
- GC : Garbage Collector
JVM이란 "자바 프로그램이 수행되는 프로세스"를 의미하며 프로그램이 수행되는 동안 메모리 관리를 해주어야 하는데 이 때, JVM안에 GC가 다음과 같이 "프로그램이 수행되고 다양한 객체들이 생성되는 반복 행위에서 발생한 더 이상 사용하지 않는 힙 메모리 영역의 객체들을 자동으로 정리" 작업을 해줌으로써 Java는 다른 언어와 달리 사용하지 않는 사용하지 않는 메모리에 대한 해제 작업을 수동으로 하지 않아도 된다.
Java.Lang 패키지
Java.Lang 패키지는 자주 사용하는 클래스가 모여있는 곳이다. 그렇기 때문에 선언 없이 사용할 수 있도록 되어있다.
숫자를 처리하는 클래스
- Byte
- Short
- Integer
- Long
- Float
- Double
- Character
- Boolean
각종 정보를 확인하기 위한 System 클래스
- System.err : 에러 및 오류를 출력할 때 사용
- System.in : 입력값을 처리할때 사용
- System.out : 출력값을 처리할 때 사용
'Programming > Backend' 카테고리의 다른 글
자바 기초 다지기 - 6 (Thread, Syncronized, Serializable, IO, NIO) (0) | 2021.09.13 |
---|---|
자바 기초 다지기 - 5 ( Generic, Collection, Map ) (0) | 2021.09.06 |
자바 기초 다지기 - 3 (API, Object, 추상, final, Enum, 예외, String) (0) | 2021.08.23 |
자바 기초 다지기 - 2 (조건문, 반복문, 배열, 참조자료형, DTO, 상속, 오버라이딩, 오버로딩, 다형성) (0) | 2021.08.16 |
자바 기초 다지기 - 1 (클래스, 메소드, 변수, 컴파일, 연산자) (0) | 2021.08.16 |