'상속'에 해당되는 글 2건

  1. 2014.04.07 [Java] 09. 상속, 추상클래스, 인터페이스
  2. 2014.04.06 [Java] 08. 상속
  • 인터페이스 (Interface)
    • 클래스에 필요한 메소드들에 대한 약속.
    • 어떤 기능이 있어야한다. 라고만 정하고 그 메소드가 어떻게 돌아가는지는 상관 없음.
    • 그저 스펙을 정의.

  • 추상클래스 (Abstract class)
    • 클래스의 용도가 객체 생성 용도로 사용하지 않는 경우에 사용함.
    • 클래스의 객체 생성의 용도가 아니라면 변수의 타입으로 선언하는 용도와 상속의 본연의 기능으로 특정한 코드를 하위 클래스로 물려주는 기능을 활용할 때 사용함.
    • 객체를 생성하지는 않으나 변수 선언 용도로 사용됨.
    • 상속의 고유 기능인 하위 클래스에 같은 데이터와 기능을 가지도록 물려주는 기능

  • 상속 (Inheritance)
    • 특정 클래스를 구성할 때 기존 클래스의 데이터(속성)와 메소드를 상위(부모) 클래스에서 그대로 물려받아서 중복적인 코드를 줄인다는 장점.
    • 하나의 변수 타입으로 여러 종류의 객체를 의미하는 추상화된 방식의 프로그램이 가능하게 하는 객체지향 기법

  • 인터페이스 vs 추상클래스
    • 공통점
      • 추상 메소드를 가진다.
      • 객체 생성이 불가능하고 타입으로만 사용됨.
    • 차이점
      • 인터페이스는 스펙이나 원하는 기능을 정의하고자 쓰지만, 추상 클래스는 ‘상속+약간의 강제성이 목적’이다.
      • 인터페이스는 상수, 추상 메소드만 존재하지만, 추상클래스는 상속이 원래 목적이므로 실제 변수나 메소드를 그대로 가지고 있다.
      • 인터페이스는 부채만 남겨주지만, 추상 클래스는 재산도 남겨준다.
      • 인터페이스는 다중 상속(?)도 가능하지만, 추상 클래스는 단일 상속만 가능.


'공대생 > Java Programming' 카테고리의 다른 글

[Java] 10. 자료구조  (0) 2014.04.08
[Java] 08. 상속  (0) 2014.04.06
[Java] 07. 객체지향(2)  (0) 2014.04.04
[Java] 06. 객체지향(1)  (0) 2014.04.04
[Java] 05. 배열(2)  (0) 2014.04.03
Posted by 믐믐믐믐믐
,

  • 자바 프로그래밍에서 '상속'을 설명할 때 주로 재활용, 재사용이라는 말을 많이 한다. 재사용은 객체 지향적인 프로그래밍에서 얻을 수 있는 큰 이점 중 하나인데 상속은 어떤 기존의 클래스의 특징을 그대로 재사용하여 다른 클래스를 만들 수 있게 해주는 기법으로써 코드를 재사용할 수 있는 기법이다.

  • 상속의 구현은 만약 Bullet이라는 클래스가 있고 이 Bullet의 특성을 물려받는 다른 종류의 Bullet, 예를들어 LightBullet 클래스를 만든다고 하면 

class LightBullet extends Bullet{

//...

}

과 같이 자식클래스 명 옆에 'extends  조상클래스명'을 써주는 것으로 가능하다.

이때, 두 클래스는 상속관계에 있으며
    Bullet 클래스는 상속을 해주는 클래스이며, 조상 클래스, 부모 클래스, 상위 클래스 등과 같이 부르고 
    LightBullet 클래스는 상속을 받는 클래스이며, 자손 클래스, 자식 클래스, 하위 클래스 등과 같이 부른다.


  • 다음은 총을 쏘는 Gun 클래스, 총알인 Bullet 클래스, Bullet 클래스를 상속받은 다른 종류의 총알인 BombBullet 클래스, LightBullet클래스로 구성된 예제이다.

package BulletEx;
public class Gun {
	private Bullet[] bullets; //총알이 담길 Bullets배열 생성.
	private int index;

	public Gun(Bullet[] bullets) {
		super();
		this.bullets = bullets;
	}

	public Bullet fire() {
		return bullets[index++];
	}

	public static void main(String[] args) {

		Bullet[] arr = new Bullet[20];

		for (int i = 0; i < arr.length; i++) {
			if (i % 5 == 0) {
				arr[i] = new LightBullet();
				continue;
			}
			if (i % 6 == 0) {
				arr[i] = new BombBullet();
				continue;
			}
			arr[i] = new Bullet();
		}

		Gun gun = new Gun(arr);

		for (int i = 0; i < 20; i++) {

			Bullet bullet = gun.fire();

			bullet.effect();

		}
	}
}

package BulletEx;
class Bullet {
	public void effect() {

		System.out.println("탕탕탕");

	}
}

package BulletEx;

public class LightBullet extends Bullet { 

	@Override
	public void effect() {
		System.out.println("------------------------");
		super.effect(); // bullet에 있는 effect를 한 번 호출해주고 내려온다 super 은 상속받은 곳 안에서만
						// 쓸 수 있음
		System.out.println("번쩍번쩍");
		System.out.println("------------------------");
	}
}

package BulletEx;

public class BombBullet extends Bullet {

	@Override
	public void effect() {
		// TODO Auto-generated method stub
		System.out.println("------------------------");
		super.effect();
		System.out.println("펑펑펑");
		System.out.println("------------------------");
	}

}


'공대생 > Java Programming' 카테고리의 다른 글

[Java] 10. 자료구조  (0) 2014.04.08
[Java] 09. 상속, 추상클래스, 인터페이스  (0) 2014.04.07
[Java] 07. 객체지향(2)  (0) 2014.04.04
[Java] 06. 객체지향(1)  (0) 2014.04.04
[Java] 05. 배열(2)  (0) 2014.04.03
Posted by 믐믐믐믐믐
,