관리 메뉴

개발하는 동그리

[Java] 객체지향 프로그래밍 (1) - 상속편 본문

IT 정보/Java

[Java] 객체지향 프로그래밍 (1) - 상속편

개발하는 동그리 2022. 5. 12. 13:31
반응형

상속이란? 

기존 클래스를 재사용하여 새로운 클래스를 작성하는 문법 요소
멤버(필드, 메서드, 이너클래스)를 하위 클래스에게 건네준다. 

보통 상위클래스와 하위클래스가 상속 관계에 있다고 표현하며, 하위 클래스는 항상 상위클래스보다 멤버갯수가 같거나 더 많다. = 클래스로부터 확장되었다 라는 표현이 정확한 표현이다. 

 

상속을 사용하는 이유

코드를 재사용하면 적은 양의 코드로 새로운 클래스를 작성할 수 있고 중복도 제거할 수 있다. 
따라서 상속을 하게되면 다형적 표현이 가능해진다. 

다형적 표현이란!? 
하나의 객체가 여러 모양으로 표현되는 것

객체의 다형성은 객체지향형 프로그래밍에서 가장 핵심적인 개념이며, 상속의 장점 중에 하나가 다형성의 표현이다. (중요)

 

상속의 조건

  • 단일 상속만 사용할 수 있다.
  • 다중 상속이 허용되지 않는다. 

 

메서드 오버라이딩

  • 메서드의 선언부(메서드 이름, 매개변수, 반환타입)가 모두 상위클래스와 완전히 일치해야 한다. 
  • 접근 제어자의 범위가 상위클래스의 메서드보다 같거나 넓어야 한다. (잘 모르겠음)
  • 예외는 상위 클래스의 메서드보다 많이 선언할 수 없다. (잘 모르겠음)
public class Main {
    public static void main(String[] args) {
        Game1 game1 = new Game1();
        Game2 game2 = new Game2();
        Game3 game3 = new Game3();
        Game game = new Game();
        	   
        game1.run();
        game2.run();
        game3.run();
        
        Game game11 = new Game1(); 
        Game game22 = new Game2();
        Game game33 = new Game3();

        game11.run();
        game22.run();
        game33.run();
    }
}

class Game {
    void run() {
        System.out.println("Game 시작!");
    }
}

class Game1 extends Game {
    void run() {
        System.out.println("game1 실행중");
    }
}

class Game2 extends Game {
    void run() {
        System.out.println("game2 실행중");
    }
}

class Game3 extends Game {
    void run() {
        System.out.println("game3 실행중");
    }
}

//Output
game1 실행중
game2 실행중
game3 실행중
Game 시작!
game1 실행중
game2 실행중
game3 실행중

위 코드는 Overwrite 오버라이드 예시이다. 
그리고 객체를 생성할 때 참조변수에 상위클래스를 사용할 수 도 있는데, 이때에는 상위클래스에 있는 것만 사용할 수있다. 또는 오버라이드 된 것도 사용가능하다.

 


Game[] game = new Game[] { new Game1(), new Game2(), new Game3()};
for (Game game : Game) {
		game.run();
}

//Output
game1 실행중
game2 실행중
game3 실행중

상위 클래스 타입으로 객체를 생성해서 배열로 관리할 수 있다. 

 

Object 클래스 ( 최상위 Class )

최상위 클래스 Object 클래스는 기본 defalut 값이라고 보아도 무관하다.
왜냐하면 아무런 상속도 받고있지 않는 클래스는 extends object 가 추가되어 상속받고 있는 상태가 되기 때문이다.

메서드 명 반환 타입 주요 내용
toString() String 객체 정보를 문자열로 출력
equals(Object obj) boolean 등가 비교 연산(==)과 동일하게 스택 메모리값을 비교
hashCode() int 객체의 위치정보 관련. Hashtable 또는 HashMap에서 동일 객체여부 판단
wait() void 현재 쓰레드 일시정지
notify() void 일시정지 중인 쓰레드 재동작

이 밖에도 더 많은 메서드를 참조하고 있지만, 대표적인 Object 클래스의 메서드들이다. 

반응형