[JAVA] #10. 제어자 + 추상클래스 + 인터페이스
<<<< 제어자 >>>>
+ 메서드에 static, abstract를 함께 쓸 수 없다.
+ 클래스에 abstract와 final을 동시에 사용할 수 없다.
+ abstract 메서드의 접근제어자가 private일 수 없다.
+ 메서드에 private과 final을 같이 사용할 필요가 없다.
# 접근 제어자
$$$ 캡슐화
접근제어자의 필요성
+ 외부로부터 데이터를 보호
+ 외부에서는 불필요하고 내부적으로만 사용되는 부분을 은닉
# 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는 구현부 있어야 됨
♥장점
개발시간 단축 가능 - 표준화 가능 - 클래스간 관계 형성 - 독립적인 프로그래밍 가능