[Java] 자바가 확장한 객체지향 키워드들

szlee·2023년 10월 26일
0

Java

목록 보기
8/23

abstract

메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상 메서드를 선언하는데 사용.

  • 클래스에 사용하면 클래스 내에 추상 메서드가 선언되어 있음을 의미
  • 메서드에 사용하면 선언부만 작성하고 구현부는 작성하지 않은 추상메서드임을 알림

추상 메서드 : 선언부는 있는데 구현부가 없는 메서드 (몸체가 없음!)
추상 메서드를 하나라도 갖고 있는 클래스는 반드시 추상 클래스로 선언해야한다.
(추상 메서드 없이도 추상 클래스를 선언할 수는 있다)

이 클래스 자체로는 쓸모가 없지만 다른 클래스가 이 클래스를 상속받아 일부의 원하는 메서드만 오버라이딩 해도 된다.

추상클래스는 멤버 개수와 관련된 것이 아니라 추상 메서드를 포함하고 있다는 의미이다.

  • 추상클래스는 인스턴스, 즉 객체를 만들 수 없다. > new를 사용할 수 없다.
  • 추상 메서드는 하위 클래스에게 메서드의 구현을 강제한다. (오버라이딩 강제)
  • 추상 메서드를 포함하는 클래스는 반드시 추상 클래스여야 한다.
  • 추상클래스는 추상메서드를 포함하고 있다는 것을 제외하고는 일반 클래스와 같다. 추상클래스에도 생성자가 있고, 멤버변수와 메서드도 가질 수 있다.
  • 추상클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 조상인 추상클래스의 추상메서드를 모두 구현해주어야 한다.

추상메서드처럼 미완성 상태로 남겨두는 이유?
메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문!



인터페이스

일종의 추상클래스인데 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높다. 그래서 ⭐️일반메서드, 멤버변수를 구성원으로 가질 수 없다.⭐️
오직 추상메서드와 상수만을 멤버로 가질 수 있다.

  • 키워드로 class 대신 interface를 사용한다.
  • 모든 멤버변수는 public static final이어야한다. (생략가능)
    • 인터페이스는 public 추상메서드와 public 정적 상수만 가질 수 있다.
  • 모든 메서드는 public abstract어야한다.(생략가능)
    • 인터페이스는 추상 메서드와 정적 상수만 가질 수 있으므로 메서드에 public, abstract, 속성에 public, static, final 붙이지 않아도 자동으로 자바가 알아서 붙여준다.

인터페이스는 인터페이로부터만 상속 가능하며 클래스와 달리 다중상속이 가능하다.

  • 키워드는 implements
  • 상속과 구현을 동시에 할 수도 있다. extends A implements B

인터페이스 장점

  • 개발 시간 단축
  • 표준화. 보다 일관되고 정형화된 프로그램 개발 가능
  • 서로 관계없는 클래스들에게 관계 맺어줄 수 있다.
  • 독립적인 프로그래밍 가능


생성자

클래스의 인스턴스, 즉 객체를 만들 때마다 new키워드를 사용한다.

동물 뽀로로 = new 동물();
클래스명 옆에 열고 닫는 소괄호는 왜 붙일까?
메서드를 의미할 때 소괄호를 붙였는데..
클래스명()도 메서드다!

반환값이 없고 클래스명과 같은 이름을 가진 메서드를 객체를 생성하는 메서드,
객체 생성자 메서드라 한다. 줄여서 생성자라고 많이 부른다.

하지만 그런 메서드를 만든 적이 없는데?
자바가 알아서 인자가 없는 기본 생성자를 자동으로 만들어 주었다.
필요하다면 인자를 갖는 생성자를 더 만들 수도 있다.

  • 개발자가 아무런 생성자도 만들지 않으면 자바는 인자가 없는 기본 생성자를 자동으로 만들어준다.
  • 인자가 있는 생성자를 하나라도 만든다면 자바는 기본 생성자를 만들어 주지 않는다.


final

final 마지막, 최종.키워드가 나타날 수 있는 곳은 클래스, 변수, 메서드.

  • 클래스에 final이 붙었다면? 상속 허락하지 않는다. 하위 클래스 만들 수 없다.
  • 변수에 final이 붙었다면? 변경 불가능한 상수가 된다.
  • 메서드에 final이 붙었다면? 최종이니 오버라이딩 금지한다.



instanceof

객체가 특정 클래스의 인스턴스인지 물어보는 연산자.
결과로 true 또는 false를 반환한다.



this

객체가 자기 자신을 지칭할 때 쓰는 키워드.

지역변수와 객체변수가 같은 이름을 가졌을 때 지역변수에 저장되어 있는 값이 출력된다.
그러나 this키워드를 붙이면 객체 변수에 저장된 값을 사용하게 된다.

class 펭귄 {
  int var = 10;

  void test() {

    int var = 20;
    System.out.println(var); // 20 출력
    System.out.println(this.var); // 10 출력
  
  }
}


super

this가 객체 멤버 메서드 내부에서 객체 자신을 지칭하는 키워드라면,
super는 바로 위 상위 클래스의 인스턴스를 지칭하는 키워드.
(super.super로 상위의 상위 클래스의 인스턴스에는 접근 불가능하다)





자바의 정석, 스프링 입문을 위한 자바 객체지향의 원리와 이해

profile
🌱

0개의 댓글