🐢 꼬부기 LV.1 | 개념•기초/💧물대포(핵심개념)

상속/protected/super/오버라이딩/다형성/동적바인딩

서화 2025. 10. 20. 21:21

상속이란

포켓몬 이라는 클래스가 있고 포켓몬안에 꼬부기라는 클래스가 있다

여기서 포켓몬은 부모클래스/상위클래스 꼬부기는 자식클래스/하위클래스가 된다

부모클래스는 여러개일수 없으며 자식의 자식의 자식은 가능하다

설계가 완벽하다고 생각하고 코딩을 시작하기때문에 문제가 생기면 설계를 수정하고 코드를 다시 짠다

내가 자식을 코딩중이라면 이미 부모가 완성되어있는 부분이기때문에 완성된 부분을 내마음대로 고치면 안된다

내마음대로 고치게되면 코드의 늬앙스(뜻)이 달라지기 때문에 기본생성자를 추가함으로 인해서 뜻이 달라지게 된다 

상속은 extends 를 활용하여 사용할수 있다

class 포켓몬 { //부모

}

class 포켓몬 extends 꼬부기 { //자식

}

포켓몬클래스의 멤버변수가 private로 지정되어었다면 외부에서 꺼내 쓰기 어려운데 이때 접근제어자를 protected로 바꿔주면

자식클래스에서 꺼내서 사용이 가능하다

public 공유가능
protected 자식클래스까지 공유가능
private 나만보기

상속을 했다고해서 생성자 만드는 방식에 영향을 끼치지 않으므로 그냥 하던대로 하면된다

객체 코딩에서 생성자가 중요하다

자식클래스를 만들게 되면 에러가 생기는데 이유는 부모의 기본생성자가 없기때문이다

이때 쓸수있는게 super다 super는 다른생성자를 호출하여 부모클래스의 기본생성자를 대신할수 있는것으로

class Water extends Pokemon {

Water(String name){

super("물",name);

}

형태로 사용할수 있다.★ super사용시 자식의 모든 생성자들은 가장 먼저 부모의 기본 생성자를 호출 한다

오버로딩과 오버라이딩

오버로딩의 정의는 함수명 중복정의 허용으로 상속에 영향을 받지 않고 기능은 같은데 메세드 시그니처가다를때 사용할수 있고

오버라이딩의 정의는 부모클래스가 만든 메서드가 자식의 맘에 들지 않을때 자식이 메서드를재정의하는것이다

상속에 영향을 받으며 메서드 시그니쳐가 부모와 같아야 사용할수 있다

오버라이드 사용시 부모클래스의 printInfo();를 복사해서 사용할수 있지만 메인함수에서 호출할때 이 메서드시그니처가 어디에 소속되어 있는지 잘확인해야하고 신중히 사용해야한다 즉 내가 정의한 이름의 메서드를 기억해야하는데 개발자입장에서 코드컨드롤이 어려워지고 부모클래스의 printInfo();가 변경되면 자식의 printInfo();도 변경해줘야한다 따라서 코드의 결합도가 높다

때문에 오버라이드를 사용하게 되면 부모의 메서드는 다시 사용할수 없다

@Override

골뱅이를 어노테이션이라고 부른다.코드에 특정설정값을 부여하기도 하고 가독성을 증가시켜준다

void attack() {

System.out.println("물대포!!~~~");

}

다형성이란 실제로 존재하는 객체가 무엇인지에 따라 같은 메서드를 호출하더라도 다른 기능이 수행되는 현상이다

★★★동적바인딩이란 ★★★

부모의 변수안에 구현된 실제객체가 자식인 상황으로 오버라이딩된 메서드를 호출시,

실제객체의 메서드가 수행되는 현상이다

★★★동적바인딩 덕분에 다형성이 실현된다★★★