NOW OR NEVER

[JAVA] Keyword와 객체 지향 프로그래밍의 다형성 본문

Back-End/JAVA

[JAVA] Keyword와 객체 지향 프로그래밍의 다형성

LAURA 2022. 4. 6. 17:59
반응형

Keyword

final

  • 클래스의 멤버변수 앞

    • 변수이기는 하지만 상수(고정된)처럼 사용하고자 할 때 사용하는 것
    • 특정 값 이외의 다른 값을 사용하면 안될 때 사용
      • ex) final int b = 10; b라는 변수이기는 하지만 10외에 다른 값을 가지면 오류가 발생하게 만듦
    • 상수는 모두 대문자로 만든다. 그래서 final 붙을 경우 변수가 상수 역할을 하므로 대문자로 만들어 주는 것이 좋다.
    • final은 어차피 못바꾸는 것이라서 객체마다 따로 메모리를 잡을 필요가 없다. 그래서 final 이면 static으로 만들어서 모든 객체가 같이 사용한다.
      • ex) final static String ADDR = "서울시 마포구 서교동";
  • 클래스의 멤버메소드명 앞

    • 최종 메소드
    • 부모로부터 물려받은 final method는 overriding 할 수 없음
    • ex) public final void pro(){}
  • 클래스의 클래스이름 앞

    • final class는 상속받을 수 없다. = 자식 클래스가 없다.
    • ex) final class Bird{} -> class Plane extends Bird{} 불가

      this와 this()

  • this

    • 현재 클래스의 멤버 변수를 가리킨다.
    • 메소드나 생성자의 매개변수 이름을 의미있는 이름으로 정해주면 멤버이름과 동일하게 되는 데 이때 멤버 자신을 구별할 목적으로 사용한다.
  • this()

    • 생성자 안에서 다른 생성자를 호출할 때 사용한다.
    • 생성자가 중복 정의되어 있을 때 생성자 안에서 또 다른 생성자를 요구할 때 사용한다. 이때 반드시 생성자의 첫 번째 문장에 와야 한다.

super와 super()

  • super
    • 상속 관계에 있을 때 부모 클래스에 있는 멤버(변수 or 메소드)와 똑같은 이름의 멤버(변수 or 메소드)를 자식 클래스에서 만들면 부모에 있는 동일한 이름의 멤버는 가려지게 된다. 이때 부모의 동일한 이름의 멤버에 접근하기 위해 super 사용.
    • 예를 들어 부모 클래스에도 hello() 메소드가 있고 자식 클래스에도 hello() 메소드가 있다면 hello() 호출하면 자식 클래스의 hello()가 동작한다. 부모에 있는 hello() 동작시키려면 super.hello()라고 해야 한다.
  • super()
    • 상속 관계에 있을 때 부모의 생성자를 요구하고자 할 때에 super() 사용한다. 이때 반드시 첫번째 문장에 와야 한다.
    • 자식 생성자에서 맨 첫 번째 문장에 부모의 기본생성자를 요구하는 super()가 생략되어 있다.(쓰지 않아도 자동으로 요구된다.)
    • 만약 부모의 기본생성자가 아닌 매개변수를 갖는 생성자를 동작시키고자 한다면 반드시 super(값1, 값2,...)로 명시해야 한다.(부모의 매개변수 개수에 맞도록)

다형성

  • 객체에게 시킨 일은 동일하다(객체에게 동일한 메세지를 주었다.) 하지만 객체마다 서로 동작하는 방식이 다르다.

    abstract

  • 추상메소드
    • 미래에 만들어질 자식클래스들이 공통으로 가져야 할 속성들과 동작들을 모아서 미리 부모클래스를 만들 수 있다. 이때 어떠한 동작이 반드시 자식클래스에 있어야 하지만 부모클래스를 만드는 시점에서 그 내용을 구체화 할 수 없다. 이러한 메소드는 메소드의 본체 {}를 구체화 하지 않고 메소드 선언문만 적는다. 이러한 메소드를 추상메소드라 한다.
    • 자식이 반드시 해당 메소드를 overriding 해야 한다는 강제성을 부여함
      • 자동화 : 마우스 오른쪽- source - Override /Implement Methods
    • 메소드 이름 앞에 abstract 키워드 작성
      • ex) public abstract void move();
  • 추상클래스
    • 어떤 클래스가 추상메소드를 하나라도 포함하고 있으면 그 클래스를 추상클래스라 한다.
    • 클래스이름 앞에 abstract 키워드 작성
    • ex)
      public abstract class Animal {
          public abstract void move();
      }

      has a, is a

  • 자바로 만들어진 소프트웨어 속을 들여다 보면 수많은 클래스들로 구성되어 있다. 그 클래스들은 has a 관계이거나 is a 관계에 있다.
  • has a
    • ex) A라는 클래스가 있고 B 클래스가 멤버변수로 A클래스의 객체를 갖는다고 하면 B has a A의 관계이다.
  • is a
    • 상속관계에 있는 클래스를 is a 관계라고 한다.
    • is a 관계에 있는 부모클래스의 참조변수는 자식클래스의 객체를 참조할 수 있다.
    • 부모 클래스의 참조변수로 자식 클래스의 객체를 생성한 후 오버라이딩한 메소드를 호출하면 자식 클래스의 메소드가 동작한다.
    • 부모 클래스의 참조변수로 자식 클래스에 새로 추가된 메소드(오버라이딩한 메소드가 아닌 메소드)는 바로 호출할 수 없다. 자식 클래스로 형변환((B)ob : ob라는 객체를 B라는 클래스로 형변환) 한 후 호출할 수 있다.
    • ex) 만약 A라는 클래스를 확장한 C 클래스가 있다면 C is a A의 관계이다. A is a C는 아니다. 즉 문장으로 설명하면 A가 동물이고 C가 사자라고 하면 -> 사자는 동물입니다(o), 동물은 사자입니다(x)

Interface

  • ob instanceof B : ob가 B의 자료형이다.

Tips

  • Math class method
    • Math.PI : pi값
    • static method로서 굳이 객체 생성하지 않고 빠르게 쓸 수 있는 메소드들
      • Math.pow(제곱할 값, 얼마나 제곱할지) : 제곱해주는 메소드
  • toString 자동
    • 마우스 오른쪽 - source - generate toString()
    • toString 자동으로 만들 때 부모로부터 toString을 물려받고 싶을때 inherited에서 체크하면 된다.
Comments