본문 바로가기
Study/Java

06. <제어자, 캡슐화, 다형성, 형변환, 인터페이스 > ~자바의 정석 summary ~

by 하구땡 2023. 1. 13.
반응형

24. 접근제어자(access modifier)

*접근 제어자가 사용될 수 있는 곳 - 클래스, 멤버변수, 메서드, 생성자

1)private : 같은 클래스 내에서만 접근 가능

2)default : 같은 패키지 내에서만 접근 가능

3)protected : 같은 패키지 내에서, 다른 패키지의 자손 클래스에서 접근 가능

4)public : 접근 제한 없음

 

25. 캡슐화(encapsulation)

: 클래스의 내부에 선언된 데이터를 보호하기 위함이다. 

  (외부로부터의 접근 제한 목적)

  -> 데이터 감추기(data hiding)

* 보통 멤버변수의 값을 읽는 메서드의 이름을 ‘get멤버변수’ (이하 게터)로 하고, 멤버변수의 값을 변경하는 메서드의 이름을 ‘set멤버변수’ (이하 셋터)로 한다.

 

26. 다형성(polymorphism)

: 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함

  -> 조상 클래스 타입의 참조변수로 자손클래스의 인스턴스 참조 가능

  -> 똑같은 인스턴스를 가리키지만 실제 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다.

  -> 따라서, 자손 타입의 참조변수로는 조상 타입의 인스턴스 참조 불가능

 

27.참조변수의 형변환

- 서로 상속관계에 있는 클래스 사이에서는 참조 변수의 형변환 가능

- 사용할 수 있는 멤버의 개수를 조절하기 위한 것이다.

- 실제 가리키는 인스턴스 객체가 무엇인지가 중요

- 기본형의 형변환과 달리 참조형의 형변환은 저장된 값이 반환되는 것이 아니다.

(리모컨을 갈아서 든다는 느낌. 실제 객체는 Tv일때 오른쪽은 바꾸려는 리모컨, 왼쪽은 내가 다루려는 리모컨. 리모컨에 달린 기능은 다르기 때문에 Tv가 아무리 기능을 갖고 있다고 한들 리모컨에 그 기능이 없으면 다룰 수 없다.)

 

           27-1. instanceof

: 주로 조건문에 사용되며, 왼쪽에는 참조변수를 오른쪽에는 타입을 넣는다.

- boolean값인 true와 false중의 하나를 반환한다.

- true가 나오면 왼쪽 참조변수가 오른쪽 타입으로 형변환이 가능하다.

*값이 null인 참조변수는 false를 결과로 얻는다.

*메서드에서 매개변수로 한 클래스를 사용하면, 그 클래스의 자손클래스들은 어느 것이나 매개변수로 받아들일 수 있다.

 

28. 인터페이스(interface)

- 일종의 추상클래스로, 추상클래스는 일반클래스이지만 인터페이스는 추상메서드의 집합이다.

Interface 인터페이스이름 {
           Public static final 타입 상수이름 = 값;           (상수)
           Public abstract 메서드이름(매개변수목록);        (추상메서드)
}

 

공통점 : 추상메서드를 가지고 있다.

다른점 : 추상클래스와 달리 인터페이스는 iv를 가질 수 없다.

 

1) 모든 멤버가 항상 public abstract이다. (따라서 생략 가능)

￰ Ex) public abstract String getCardNumber();

            -> String getCardNumber();

 

2) 변수를 가질 수 없으나 상수, static메서드, 디폴트 메서드는 가능하다.

 (이때 디폴트 메서드에서 default 키워드는 생략 불가)

 *default void newMethod() {}

 *인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩해야 한다.

 *조상클래스의 메서드와 디폴트 메서드가 충돌하면 조상클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.

 

3) 인터페이스는 항상 예외없이 public static final형태의 상수이기 때문에 해당 키워드도 생략 가능하다.

￰ Ex) public static final int DIAMOND = 3;

           -> int DIAMOND =3;          

   // 해당처럼만 쓰여도 public static final과 같다.

 

4) 인터페이스의 접근제어자로는 클래스와 같이 public, default만 가능하다.

5) 인터페이스는 인터페이스로부터만 상속받을 수 있고 다중상속이 가능하다.

6) Object클래스를 최고 조상으로 갖지 않는다.

7) 인터페이스를 구현한다는 의미로 키워드는 ‘implements’를 사용한다.

8) 인터페이스의 자손 인터페이스가 메서드 중 일부만 구현한다면, abstract를 붙여 추상클래스로 선언해야 한다.

9) 매개변수로 인터페이스를 사용한다면, 그 인터페이스를 구현한 자손 인터페이스가 매개변수로 올 수 있다.

* 리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다.

* <인터페이스의 장점>

1) 개발시간을 단축시킬 수 있다.
2) 표준화가 가능하다.
3) 서로 관계 없는 클래스들에게 관계를 맺어 줄 수 있다.
4) 독립적인 프로그래밍이 가능하다.

 

29. 내부 클래스(inner class)

: 클래스 내에 선언된 클래스

* <내부클래스의 장점>

1) 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.(private)

2) 코드의 복잡성을 줄일 수 있다.(캡슐화)

 

* <내부클래스의 특징>

1) 내부 클래스의 종류와 유효범위(scope)는 변수와 동일

   (인스턴스 클래스, 스태틱 클래스, 지역 클래스, 익명 클래스)

2) 기존 클래스의 제어자는 default, public밖에 안됐지만 내부클래스는 변수와 같이 4개 전부 다된다.

3) 내부클래스에 있는 static멤버는 static클래스만 가질 수 있다. (상수는 예외)

4) 지역 내부 클래스의 static 상수는 메서드 내에서만 사용 가능

5) 내부 클래스는 외부 클래스의 private멤버도 접근가능하다.

6) 지역 내부 클래스에서는 외부 클래스의 지역 변수 중 상수만 접근가능하다.

   (그러나 final이 없어도 변수의 값이 변경되지 않았다면 상수로 간주하여 접근 가능

   JDK1.8부터 값이 변하지 않는 변수는 상수로 간주한다.)

            

30. 익명클래스

: 이름이 없는 클래스로 클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한 번만 사용될 수 있고, 오직 하나의 객체만을 생성하는 일회용 클래스.

1) new 조상클래스이름() {

   }

2) new 구현인터페이스이름() {

   }

3) 오로지 단 하나의 클래스를 상속받거나 하나의 인터페이스를 구현한다.

ex) static object cv = new object() {void method() {}};

반응형

댓글