JAVA

[JAVA] #10. 제어자 + 추상클래스 + 인터페이스

saniii 2020. 11. 17. 15:07

<<<< 제어자 >>>>

+ 메서드에 static, abstract를 함께 쓸 수 없다.

+ 클래스에 abstractfinal을 동시에 사용할 수 없다.

+ abstract 메서드의 접근제어자가 private일 수 없다.

+ 메서드에 privatefinal을 같이 사용할 필요가 없다.

 

# 접근 제어자

$$$ 캡슐화

접근제어자의 필요성

+ 외부로부터 데이터를 보호

+ 외부에서는 불필요하고 내부적으로만 사용되는 부분을 은닉

# static

+ 멤버변수, 메서드, 초기화 블록 앞에 사용

+ 클래스에 관련된 것, 공통적인 것

*static 멤버변수 : 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다. //클래스당 하나

: 클래스변수는 인스턴스를 생성하지 않고도 사용 가능하다.

: 클래스가 메모리에 로드될 때 생성

*static 메서드 : 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다.

: static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다.

# final

+ 클래스, 메서드, 멤버변수, 지역변수 앞에 사용

+ 최종적인, 더 이상 변경 불가능한 것

final 클래스 : 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다. / 다른 class를 상속받을 수 없다.

final 메서드 : 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다.

final 멤버변수/지역변수 : 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다.

 

<<<<< 추상 클래스 >>>>>

+ abstract로 선언한 클래스 // 아래조건과 이 조건 2가지 모두 만족해야(?) 에러 안남

+ 추상메서드를 포함하고 있는 클래스 선언부만 있고 구현부가 없는 메서드

- 일반메서드에서 추상메서드를 호출 가능

- 완성된 설계도가 아니므로 객체를 생성할 수 없음

- 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우에 사용

- 추상클래스를 상속받는 자손클래스에서 추상메서드의 구현부를 완성해서 사용 /그냥 상속받으면 마찬가지로 추상클래스 됨

 

<<<<< 인터페이스 >>>>>

+ 일종의 추상클래스

+ 추상클래스보다 추상화 정도가 넢음

+ 실제 구현된 것이 전혀 없는 기본 설계도

+ 추상메서드와 상수만을 멤버로 가질 수 있음

- 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.

- 모든 메서드는 public abstract 이어야 하며 이를 생략할 수 있다.

+ 인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적으로 사용

+ 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는데 사용

- 이름은 대문자로 시작

- 생성자, 인스턴스 변수, 메서드 바디 있으면 안돼용 - ~java로 저장

+ 인터페이스도 상속됩니다. 근데 다중도 돼!!! (다만 인터페이스끼리만)

+ Object 같은 최고 조상 없어용

+ 이거 쓸 땐 class 이름 implements

- 인터페이스에 정의된 추상메서드를 모두 완성해야 함

- 상속과 구현이 동시에 가능하다.

- 인터페이스를 메서드의 매개변수 타입, 리턴 타입으로 지정할 수 없다.

- 인터페이스 타입의 참조변수(선언가능)로 인터페이스를 구현한 클래스의 인스턴스를 참조할 수 있다.

$$$멤버변수 선언 할 수 없고, 상수와 추상메서드 ok, default static private는 구현부 있어야 됨

장점

개발시간 단축 가능 - 표준화 가능 - 클래스간 관계 형성 - 독립적인 프로그래밍 가능