1. 제어자란?
- 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여한다.
- 접근 제어자: public, protected, default, private
- 그 외: static, final, abstract, native
1.1 static - 클래스의, 공통적인
멤버 변수 :
모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다.
클래스변수는 인스턴스를 생성하지 않고도 사용 가능하다.
클래스가 메모리에 로드될 때 생성된다.
메서드:
인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다.
static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다.
1.2 final - 마지막의, 변경될 수 없는
클래스, 메서드, 멤버변수, 지역변수에 사용 가능
1.3 abstract - 추상의, 미완성의
클래스: 클래스 내에 추상메서드가 선언되어 있음을 의미한다.
메서드: 선언부만 작성하고 구현부는 작성하지 않은 추상메서드임을 알린다.
1.4 접근 제어자
멤버 또는 클래스에 사용되어, 외부로부터 접근을 제한한다.
클래스, 멤버변수, 메서드, 생성자에 사용 가능하다.
private: 같은 클래스 내
default: 같은 패키지 내
protected: 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능
public: 접근 제한이 없다.
2. 다형성이란?
하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것.
3. 인터페이스란?
- 일종의 추상클래스이며 추상화정도가 높다.
- 실제 구현된 것이 없는 기본 설계도이다.
- 인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적으로 사용된다.
- 구성 요소는 추상메서드와 상수만 가능하다.
- 클래스처럼 상속이 가능하며, 클래스와 달리 다중상속을 허용한다.
- object 클래스와 같은 최고 조상이 없다.
장점)
- 개발시간을 단축시킬 수 있다.
- 표준화가 가능하다
- 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.
- 독립적인 프로그래밍이 가능하다.
4. 내부 클래스란?
- 클래스 안에 선언된 클래스
- 특정 클래스 내에서만 주로 사용되는 클래스를 내부 클래스로 선언한다.
- 변수의 선언 위치에 따른 종류와 동일하며, 유효범위와 성질도 변수와 유사하다.
5. 익명 클래스란?
- 클래스 안에 선언된 클래스
- 특정 클래스 내에서만 주로 사용되는 클래스를 내부 클래스로 선언한다.
- 변수의 선언 위치에 따른 종류와 동일하며, 유효범위와 성질도 변수와 유사하다.
- 프로그램에서 일시적으로 한번만 사용되고 버려진다. 재사용성이 없고, 확장성을 활용하는 것이 유지보수에서 더 불리할 때 사용한다.
(지역변수처럼 사용된다고 생각하면 쉽다.)
class Animal {
public String bark(){
return "동물이 짖는다.";
}
}
public class Main{
public static void main(String [] args){
/* 클래스의 정의와 객체화를 동시에 한다. */
Animal cat = new Animal(){
@Override
public String bark(){
return "이번에는 고양이가 짖는다.";
}
};
}
}
만약에 오버라이딩이 아닌 새로운 메서드를 선언한다면?
class Animal {
public String bark(){
return "동물이 짖는다.";
}
}
public class Main{
public static void main(String [] args){
/* 클래스의 정의와 객체화를 동시에 한다. */
Animal cat = new Animal(){
@Override
public String bark(){
return "이번에는 고양이가 짖는다.";
}
public String fight(){
return "이번에는 고양이가 강아지랑 싸운다.";
}
};
}
}
부모인 Animal 클래스에는 fight 함수가 없기 때문에, 외부에서는 사용하지 못하고 익명 클래스 내에서만 호출이 가능하다.
'Backend Study > Java' 카테고리의 다른 글
[JAVA] 쓰레드, 프로세스, 멀티 쓰레드 (0) | 2023.01.26 |
---|---|
[JAVA] 컬렉션 프레임워크 (0) | 2023.01.26 |
[JAVA] 상속 (0) | 2023.01.26 |
[JAVA] 생성자 (0) | 2023.01.26 |
[JAVA] 배열, 변수와 메서드 (0) | 2023.01.26 |