NOW OR NEVER

[JAVA] method 호출 방식과 객체 지향 프로그래밍의 상속성 본문

Back-End/JAVA

[JAVA] method 호출 방식과 객체 지향 프로그래밍의 상속성

LAURA 2022. 4. 5. 17:44
반응형

메소드 호출방식

  • 값에 의한 호출(Call By Value)
    • 메소드 호출 시에 기본 자료형이 전달되는 것을 말하며 메소드 안에서 전달된 값이 변경되더라도 호출하는 쪽에는 변경된 내용이 적용되지 않는다.
  • 참조에 의한 호출 (Call By Reference)
    • 메소드 호출 시에 참조 자료형(객체, 배열)이 전달되는 것을 말하며, 메소드 안에서 전달된 값이 변경될 때에 호출하는 쪽에서 변경된 내용이 적용된다.
  • 참조변수 : 데이터(값)을 저장한 것이 아닌 그 값을 가리키는(메모리상의 주소 전달) 변수

상속

class b extends a{
}
  • class a가 부모 클래스, class b가 자식 클래스 : b는 a로부터 상속받겠다.
  • 자식은 부모의 모든 속성과 동작을 물려받게 된다.
  • 이미 만들어진 부모 코드를 사용해서(확장해서) 새로 몇 개(속성 등)를 추가해서 자식 코드 만드는 것을 상속이라 한다.
  • eclipes 자동화 : new - class - Superclass에서 부모클래스 선택 - finish
  • super(부모의 속성1, 속성2...)
    • 부모의 생성자를 요구하는 키워드
    • 반드시 첫 문장에 와야 한다.
  • 접근 명시자 protected
    • 상속관계에 있을 때에 아무리 자식 클래스라 할지라도 부모 클래스의 private 영역에는 직접 접근(this.a = a)할 수 없다.
    • 외부의 다른 클래스로부터는 보호하되 상속한 자식 클래스들에게는 접근을 허용하기 위해서 protected를 사용한다.
    • 클래스 설계시 확장을 염두에 두고 있다면 멤버들을 private이 아닌 protected로 두는 것이 좋다.
    • protected 사용시 자식 클래스에서 부모 클래스에 대한 직접 접근이 가능하다.
  • 생성자
    • 객체가 생성시에 자동 수행된다.
    • 상속관계에 있을 때 자식의 객체를 생성하면 부모의 생성자가 먼저 동작하고 자식의 생성자가 동작한다.
    • 부모의 생성자를 요구하기 위해서는 super()를 사용한다. 이때에는 반드시 생성자의 첫 번째 문장에 와야 한다.
      • 부모에서 매개변수를 갖는 생성자를 만들 경우 기본 생성자를 제공하지 않아 자식에서 super();만 쓰는 것을 사용 못함. super()의 경우(괄호 안에 아무것도 없는 super) 매개변수를 갖지 않는 기본생성자를 요구하는 것이기 때문이다. 그래서 매개변수를 요구하지 않는 기본 생성자를 부모에 만들어 주거나 아예 생성자를 작성하지 않아서 자바에서 제공하는 기본 생성자를 써야 한다.
      • 매개변수를 갖지 않는 생성자가 자동으로 만들어지고 부모의 매개 면수를 갖지 않는 생성자를 요구할 때 정상 작동이 되지만 부모에 기본 생성자가 없어서 오류 발생
      • 상속 관계에 있을 때 부모 클래스, 자식 클래스 모두 생성자를 만들지 않으면 기본 생성자가 제공되어 자식 클래스 생성시에 자동으로 부모의 매개변수를 기본 생성자가 요구되어 객체 생성 가능
      • 만약 부모클래스에 매개변수를 갖는 생성자를 만들고 따로 기본생성자를 만들지 않고 자식 클래스에도 생성자를 만들지 않은 상태에서 자식 클래스의 객체를 생성하게 되면 부모의 기본 생성자를 요구하기 때문에 오류 발생
      • 문제를 해결하기 위해서는 부모 클래스에 기본 생성자를 만들어 주거나 자식의 생성자에서 super()를 사용하여 부모의 매개변수를 갖는 생성자를 요구하도록 한다.
    • 직접 생성자 만들 경우 기본 생성자 만드는 습관 가지자
  • 메소드 오버라이딩 method overriding
    • 메소드 이름 뿐만 아니라 매개변수의 개수와 자료형까지 일치되게 재정의하는 것을 말한다.
    • 메소드 오버 로딩 method overloading와 다름
    • 상속관계에 있을 때 부모 클래스의 메소드가 자식클래스에는 맞지 않아 다시 정의(재정의) 하는 것을 말한다.
    • 부모와 자식에 같은 메소드가 있을 경우 자식의 메소드 우선순위가 더 높다.
    • 메소드 이름 뿐만 아니라 매개변수의 개수와 자료형까지 일치되게 재정의해야 한다.
    • 우리가 만든 모든 클래스들도 암묵적으로 Object 클래스의 후손이 된다.
      • toString, equals는 자바의 제일 조상인 Object의 메소드이며 필요하다면 자신의 클래스에 맞도록 재정의하여 사용한다.
      • 출력문에 객체를 표현하고자 한다면 toString을 오버라이딩, 두 개의 객체가 서로 동일한 속성값을 갖고 있는 지 판별하려면 equals 메소드를 재정의하여 사용한다.
      • equals 메소드
        • equals(Object b)로 재정의 해야 함
        • equals에 기본 자료형을 넣게 되면 오버라이딩이 아니므로 equals에는 기본 자료형을 넣지 못한다.
          • 마우스 오른쪽 - source - generate hashCode() and equals()
      • toString method
        • 주소 말고 그 객체가 갖고 있는 속성들을 출력하고 싶을 경우 자바 조상의 제일 조상클래스인 Object의 toString을 나한테 맞게 재정의한다.
        • 재정의 할 경우 출력문에 객체를 표현하면 toString이 자동으로 동작한다.(굳이 출력문에서 객체.toString()을 안해도)
        • 마우스 오른쪽 - source - generate toString()
Comments