반응형
Notice
Recent Posts
Recent Comments
Link
NOW OR NEVER
[JAVA] method 호출 방식과 객체 지향 프로그래밍의 상속성 본문
반응형
메소드 호출방식
- 값에 의한 호출(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()
'Back-End > JAVA' 카테고리의 다른 글
[JAVA] 상속성 & 문자열 처리 (0) | 2022.04.07 |
---|---|
[JAVA] Keyword와 객체 지향 프로그래밍의 다형성 (0) | 2022.04.06 |
[JAVA] 객체 지향 프로그래밍의 은닉성(Encapsulation) (0) | 2022.04.04 |
[JAVA] 식별자 & 주석문 & method (0) | 2022.03.31 |
[JAVA] 자료 형 (0) | 2022.03.30 |
Comments