자바와 객체지향

귤쳥·2022년 5월 26일
0

CS공부를 해보자

목록 보기
2/4
post-thumbnail

다형성(Polymorphism)

  • 하나의 객체가 여러가지 타입을 가질 수 있는 것

(부모클래스의 참조변수로 자식타입 인스턴스를 참조할 수 있음)

  • 유연하고 변경에 용이하다.
class Parent{...}
class Child extends Parent{...}
...
Parent pa = new Parent();
Child ch = new Child();
Parent pc = new Child();

Overriding & Overloading

같은 이름의 다른 함수를 호출하는 것 → polymorphism을 위함

Overriding 오버라이딩

  • 상위 클래스, 인터페이스에 존재하는 메소드를 하위클래스에서 필요에 맞게 재정의
  • 선언부가 부모와 동일해야 함(이름, 매개변수,리턴값), 접근제어자는 부모보다 좁아야 함
  • Java에서는 동적바인딩이 된다. (Runtume에 바인딩)
    • static메소드는 overriding이 불가능하다. 정적으로 연결이 되기 때문

❓ @override 어노테이션은 오버라이딩 조건은 검증해준다.
→ 컴파일러에게 재정의함을 알려줌으로써 실수를 방지한다.

Overloading 오버로딩

  • 같은 클래스 내에서 매개변수의 타입이나 개수가 다른 메소드를 만드는 것
  • return type은 동일하거나 달라도 상관 없지만, 이것만 다르면 안된다.
  • Java에서는 정적바인딩이 된다. (Complile시 바인딩)
  • Java에서는 다른 시그니쳐를 만드는 것
    • 아예 다른 함수를 만든다고 생각해서 다형성의 예시가 아니라고 판단하기도 함

❓ 메서드 시그니쳐: 메서드 명, 파라미터의 순서, 타입, 개수 (return과 exception은 제외)

객체 사이의 관계

IS-A

객체 사이의 상속(inheritance)관계

superclass의 모든 특성을 다 가진다.

is a kind of

ex) Sonata is a Car

HAS-A

자신의 객체 내에 다른 객체의 instance를 포함

belongs to

ex) Sonata has a Engine

인터페이스와 추상클래스

공통점

new를 통해 객체를 생성할 수 없으며 상속받거나 구현된 자식만이 객체를 생성할 수 있다.

인터페이스(Interface)

interface키워드로 추상메서드와 상수만 포함하여 선언

  • 결합도가 낮음
  • HAS-A
    • 구현객체의 같은 동작 보장
  • 다중상속
  • implements 로 구현

→ 상속관계를 타고 올라갔을 때 다른 조상클래스를 상속하지만 같은 기능이 필요항 경우

추상클래스(Abstract Class)

abstract로 선언된 class

  • 코드의 중복성
  • IS-A
    • 여러 클래스의 공통부분 추상화 →기능의 확장
  • 단일상속
  • extends로 상속

→ 상속관계를 타고 올라갔을 때 조상클래스를 상속하고 기능도 완전히 같은 경우

참고

https://myjamong.tistory.com/150

profile
혼긱 CE의 이제 막 시작하는 코딩

0개의 댓글