Coding 공부/Java

[Java_Summary] 어노테이션(Annotation), 추상메소드(abstract method), 인터페이스(Interface)

CBJH 2024. 2. 15.
728x90
반응형

1. 어노테이션 (Annotation)

 

  • 생략해도 코드 구현에는 문제가 되지 않는다.(골뱅이로 시작하는.. 주석 비슷한 무언가!)
  • 어노테이션(Annotation)은 Java 5부터 도입된 기능으로, 코드에 메타데이터(metadata)를 추가할 수 있게 해주는 메커니즘입니다. 어노테이션은 컴파일 타임에 처리될 수도 있고, 런타임에 리플렉션을 통해 처리될 수도 있습니다. 어노테이션은 주로 컴파일러에게 코드 작성 방법에 대한 정보를 제공하거나, 컴파일 시 코드를 자동으로 생성하도록 지시하거나, 런타임에 특정 기능을 수행하도록 하는 데 사용됩니다.
  • @Override는 자바에서 사용되는 내장 어노테이션 중 하나로, 메서드 선언 앞에 사용됩니다. 이 어노테이션은 해당 메서드가 상위 클래스의 메서드를 오버라이드(재정의)한다는 것을 나타냅니다.

2. 링크드 리스트(Linked List)

[Java_Summary] 어노테이션(Annotation), 추상메소드(abstract method), 인터페이스(Interface) - 2. 링크드 리스트(Linked List)[Java_Summary] 어노테이션(Annotation), 추상메소드(abstract method), 인터페이스(Interface) - 2. 링크드 리스트(Linked List)
왼쪽이 코드 오른쪽이 출력 결과
[Java_Summary] 어노테이션(Annotation), 추상메소드(abstract method), 인터페이스(Interface) - 2. 링크드 리스트(Linked List)

  • 링크드 리스트는 첫번째부터 순서대로만 값을 불러오거나 검색할 수 있다.
  • 양방향이 안되고 한 방향만 된다.
  • 배열과 달리 중간에 자료를 추가하거나 삭제할 수 있다.

>>다음에 자세히 배울 예정

 

3. 추상메소드(abstract method)

  • 선언되어 있으나 구현되어 있지 않은 메소드. abstract로 선언
  • [Java_Summary] 어노테이션(Annotation), 추상메소드(abstract method), 인터페이스(Interface) - 3. 추상메소드(abstract method)
  • 추상 메소드는 서브 클래스에서 오버라이딩하여 구현해야 함(강제성의 역할도 있음)

   3.1 추상 클래스(abstract class)의 2종류

  • 추상 메소드를 하나라도 가진 클래스(클래스 앞에 반드시 abstract라고 선언해야 함)
  • 추상 메소드가 하나도 없지만 abstract로 선언된 클래스
  • 추상 클래스는 객체를 만들 수 없다(메소드가 구현되지 않아서). 객체는 만들 수 없지만 변수를 선언할 순 있다. 업캐스팅에 사용할 수 있다.
  • 추상 클래스를 개체로 만드려면 서브클래스에서 구체화한 후 사용한다.

[Java_Summary] 어노테이션(Annotation), 추상메소드(abstract method), 인터페이스(Interface) - 3. 추상메소드(abstract method) - undefined -    3.1 추상 클래스(abstract class)의 2종류

   3.2 추상 클래스의 상속 2 가지 경우

1. 추상 클래스의 단순 상속

  • 추상 클래스를 상속받아, 추상 메소드를 구현하지 않으면 추상 클래스 됨 
  • 서브 클래스도 abstract로 선언해야 함

[Java_Summary] 어노테이션(Annotation), 추상메소드(abstract method), 인터페이스(Interface) - 3. 추상메소드(abstract method) -    3.2 추상 클래스의 상속 2 가지 경우

 

2. 추상 클래스 구현 상속 

  • 서브 클래스에서 슈퍼 클래스의 추상 메소드 구현(오버라이딩) 
  • 서브 클래스는 추상 클래스 아님

[Java_Summary] 어노테이션(Annotation), 추상메소드(abstract method), 인터페이스(Interface) - 3. 추상메소드(abstract method) -    3.2 추상 클래스의 상속 2 가지 경우

 

  3.3 추상 메소드 예제

[Java_Summary] 어노테이션(Annotation), 추상메소드(abstract method), 인터페이스(Interface) - 3. 추상메소드(abstract method) -   3.3 추상 메소드 예제

  • CombatPlane 클래스에서 return price;로 값을 받는 것이 가능한 이유는 Java의 상속 메커니즘 때문입니다. CombatPlane은 AirPlane 클래스를 상속받기 때문에, AirPlane 클래스에 정의된 필드(변수) price, brand, name을 상속받습니다. 따라서 CombatPlane 인스턴스는 이러한 필드에 직접 접근할 수 있으며, 이 필드들은 CombatPlane 객체 내에서도 마치 자신의 필드처럼 사용할 수 있습니다.
  • 여기서 중요한 점은 price, brand, name 필드의 접근 제어자가 package-private (접근 제어자가 명시되어 있지 않음) 또는 protected일 경우 CombatPlane 클래스에서 이 필드들에 직접 접근할 수 있다는 것입니다. package-private의 경우, 같은 패키지 내의 클래스들만 접근할 수 있으며, protected의 경우, 해당 클래스 또는 하위 클래스에서 접근할 수 있습니다.
  • super 키워드는 부모 클래스를 명시적으로 참조할 때 사용됩니다. 필드에 접근할 때 super를 사용하는 것은 부모 클래스에 정의된 필드를 참조하려 할 때 유용합니다. 그러나, 상속받은 필드에 직접 접근할 수 있는 경우(즉, 접근 제어자가 이를 허용하는 경우), super를 사용하지 않고도 필드에 접근할 수 있습니다.
  • CombatPlane 클래스에서 getPrice(), getBrand(), getName() 메소드 내에서 price, brand, name 필드에 직접 접근하는 것이 가능한 것은, 이 필드들이 AirPlane 클래스에 의해 상속되었기 때문입니다. 따라서, super.price, super.brand, super.name 대신에 price, brand, name으로 직접 접근하는 것이 가능하며, 이는 완전히 유효한 접근 방식입니다.
  • 요약하자면, CombatPlane에서 price, brand, name 필드에 super 키워드 없이 직접 접근할 수 있는 이유는, 이 필드들이 AirPlane 클래스로부터 상속받은 필드이며, 상속을 통해 자동적으로 CombatPlane 클래스의 필드처럼 사용될 수 있기 때문입니다.

 

4. 인터페이스(Interface)

  • 클래스가 구현해야 할 메소드들이 선언되는 추상형 
  • 인터페이스 선언
  • interface 키워드로 선언
  • Ex) public interface SerialDriver {…}
  • 인터페이스에는 필드(멤버 변수) 선언 불가

[Java_Summary] 어노테이션(Annotation), 추상메소드(abstract method), 인터페이스(Interface) - 4. 인터페이스(Interface)

 

[Java_Summary] 어노테이션(Annotation), 추상메소드(abstract method), 인터페이스(Interface) - 4. 인터페이스(Interface)

>>인터페이스는 다음주에 더 이어서 수업할 예정

 

306p. OpenChallenge 코딩하기

308p.실습문제 3 4 10 11 12 코딩하기

댓글