(TIL) 20220703, Java 8

2022. 7. 4. 00:34TIL(Today I learned)

반응형

🏴󠁩󠁤󠁪󠁷󠁿Facts(한 것) & Findings(배운 것)


자바에는 접근자 메서드와 변경자 메서드가 있다.

 

호출되는 객체를 변경하는 메서드를 변경자라고 하고, 객체를 변경하지 않는 메서드를 접근자라고 한다.

 

class Main {
    public static void main(String[] args) {
        ArrayList<String> friends = new ArrayList<>();
        friends.add("peter"); //변경자
        friends.get(0); // 접근자
   }
}

final로 선언된 변수는 변경이 불가능하다고 알려져있다.

 

그럼 어떤 변경인가? 인스턴스 변수에 final이 붙으면 객체 참조 변경이 불가능하다.

 

클래스 메서드에 final이 붙으면 오버라이딩이 불가능하다.

 

클래스에 final이 붙으면 상속이 금지된다.


정적 변수는 클래스당 하나만 존재한다.

 

Java에서 정적(static) 변수는 실제 '정적'이라는 것과 관련이 없다.

 

우리는 흔히 개별 인스턴스가 아니라 클래스에 속하는 변수를 정적 변수라고 부르지만,

 

여기에서 정적은 그저 C++에서 따온 의미없는 유물에 불과하다.

 

이를 좀 더 적절하게 드러내는 용어는 클래스 변수

 


패키지를 사용하는 이유가 뭘까?

 

패키지를 사용하는 이유는 여러가지가 있겠지만, 기본적으로 클래스 이름의 유일성을 보장하기 위해서이다.

 


인터페이스와 추상클래스는 뭐가 다를까?

 

기본적으로 골자는 비슷한거 같다.

 

둘다 모두 상속이라는 것을 활용하고, 추상 메서드를 가지고 있고...

 

세부 특징도 다를 뿐더러 목적도 다르다.

 

인터페이스의 목적은 '보장'이다. 같은 동작을 할 것이라는 보장.

 

추상 클래스의 목적은 '상속'이다. 상속을 해서 다양한 동작들을 추가적으로 할 수 있게끔.

 

그 외에도 추상 클래스는 인터페이스와 다르게 인스턴스 변수를 가질 수 있고, 생성자를 가질 수 있다.

 

자바 8버전 이후부터는 인터페이스도 기본메서드와, 정적 메서드, 비공개 메서드를 가질 수 있기 때문에 

 

차이점이 모두 추상클래스인 것과 아니라는 것은 틀린말이다.

 


인터페이스 구현하는 클래스는 인터페이스의 메서드를 반드시 public으로 선언해야한다.

 

왜 그럴까?

 

인터페이스는 기본적으로 공개접근을 요구하는데, 인터페이스를 구현한 하위 구현체가 private으로 메서드를 선언한다는 것은 맞지 않다.

 

공개접근을 구현한 구현체는 private이다? 

 

맞지 않다.

 

🏴󠁩󠁤󠁪󠁷󠁿Affirmation(자기선언)


 

🏴󠁩󠁤󠁪󠁷󠁿여담


 
 
 
반응형