OOP 개념 알아보기

오늘은 OOP에 대한 기본적인 개념을 다시 잡고 가려고 정리해보았습니다.

클래스

데이터 필드와 메소드 필드를 가지는 오브젝트의 템플릿입니다.

오브젝트

프로그램에 직접 들어가는 클래스의 인스턴스입니다.

클래스에 쓴 함수로 오브젝트에서 값을 입력할 수 있습니다.

캡슐화

클래스의 보안을 제공하며, 다른 개발자들이 클래스안의 멤버와 메소드를 변경할 수 없게 도와줍니다.

상속

코드 재사용을 할 수 있는 부모 자식간의 관계입니다.

부모 클래스에서 존재하는 기능을 자식 클래스에서 쓸 수 있게 해줍니다.

다형성

자바에서는 오버로딩과 오버라이딩으로 표현가능합니다.

  • 오버로딩 : 같은 함수의 이름이지만 다른 인자로 다른 행동을 취함

  • 오버라이딩 : 같은 함수의 같은 인자이지만, 상속 관계에 다른 행동을 취함

가상화

가상 클래스에 있는 가상 메소드는 구형하지않고, 상속받는 자식 클래스에서 구현해야됩니다.

만약 컨셉만 구현하고 다른 개발자들이 따라주길 바랄 때 필요합니다.

실습 코드

public abstract class Car {
	public abstract void engine();
	public abstract void fuel();
}

추상 클래스에서 공통 메소드를 추상 메소드로 만듭니다.

public class RealMinicar extends Car{
	
	private int price;
	
	public RealMinicar() {
		System.out.println("Running");
	}
	
	public RealMinicar(String s) {
		System.out.println("Running " + s);
	}
	
	public void MethodCheck() {
		System.out.println("this is original system output");
	}
	

	@Override
	public void engine() {
		System.out.println("old engine");
	}

	@Override
	public void fuel() {
		System.out.println("Oil");
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

}

추상 클래스를 상속받아서 구현하고, 생성자 오버로드와 오버라이드를 구현할 메소드를 작성합니다.

캡슐화를 위해 getter와 setter를 만들어서 변수에 접근하고 설정하는 메소드를 작성합니다.

public class RealMinicar_A extends RealMinicar {
	public void MethodCheck() {
		System.out.println("this is custom system output");
	}
}

상속받으면 부모 클래스의 메소드를 사용할 수 있으며, 오버라이드를 통해 내용을 수정할 수 있습니다.

public class Main {
	public static void main(String[] args) {
		RealMinicar test1 = new RealMinicar("speed car");
		
		RealMinicar_A test2 = new RealMinicar_A();
		
		test1.engine();
		test1.fuel();
		
		test2.engine();
		test2.fuel();
		
		test1.setPrice(300);
		
		System.out.println(test2.getPrice());
		
		test2.setPrice(200);
		
		System.out.println(test2.getPrice());
		
		test1.MethodCheck();
		
		test2.MethodCheck();
	}
}

메인 클래스에서 클래스 타입의 오브젝트(객체)를 만들어서 인자를 통해 데이터 필드에 접근합니다.

Written on February 22, 2018