Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 IT일지

추상화 본문

프로그래밍 언어/Java

추상화

세레프 2023. 4. 19. 08:45

 객체지향언어에는 실체하는 대상들의 공통된 특성을 객체로 생성할 수 있으며, 이를 추상화라고 한다. 이런 추상화는 실체 클래스들을 작성할 때, 같은 특성을 가지는 클래스를 가지는 경우에 시간을 절약할 수 있으며, 같은 이름의 변수와 메서드를 사용하게 한다.

 

추상 클래스

 객체를 생성할 수 있는 실체 클래스들에서 공통적인 메소드나 변수를 추출해서 하나의 클래스로 생성하는 것추상화라고 하며, 이때 생성되는 클래스를 추상 클래스라고 한다. 추상클래스와 실체 클래스는 상속의 관계를 가진다. 즉, 추상클래스가 부모클래스, 실체클래스가 자식클래스가 되면서, 실체클래스는 추상클래스의 특징을 상속한다.

 

 추상클래스는 "abstact"키워드로 선언이 되며, 블록에는 공통할 특징으로 구성되어 있어야 한다. 특히, 추상클래스는 객체를 생성할 수 없지만, 자식 객체에서 생성자가 필요하기 때문에, 추상 클래스에서도 생성자가 필요하다.

  abstact class 클래스명{
   
    ...
   
}
 

 위의 구조는 추상 클래스를 만드는 구조로, 블록에 추상메서드 뿐만 아니라 일반메서드, 변수, 생성자를 선언할 수 있다. 이때, 추상 메서드 추상 클래스에서만 선언할 수 있는 메서드로, 메서드의 블록 없이 선언부로만 선언이 되며, "abstact"키워드를 통해 선인이 된다.

abstract 타입 메서드명(); 

package pack0419;

abstract class Shape{
	abstract void draw();
}

class Rect extends Shape{
	 void draw() {
		 System.out.println("사각형 그리기");
	 };
}

class Cir extends Shape{
	void draw() {
		System.out.println("원 그리기");
	}
}

class Line extends Shape{
	void draw() {
		System.out.println("선 그리기");
	}
}
package pack0419;

public class Code1 {
	
	public static void main(String[] args) {
		Shape shapes[] = new Shape[3];
		
		shapes[0] = new Rect();
		shapes[1] = new Cir();
		shapes[2] = new Line();
		
		for(int i =0;i<3;i++) {
			shapes[i].draw();
		}
	}
}

 위의 코드를 보면, 추상클래스에 추상메서드를 만들고 자식 클래스에서 메서드를 오버라이딩하는 것을 확인할 수 있다. 이는 추상클래스를 상속받는 자식클래스는 반드시 부모클래스의 추상메서드를 오버라이딩 해야 하며, 하지 않을 경우 컴파일 에러가 발생하게 된다. 

 즉, 추상메서드는 부모클래스에서 내용을 구현할 필요가 없으며, 자식클래스마다 실행내용을 다르게 구현하는 경우 사용하는 메서드로, 부모클래스의 메서드는 비워놓고 자식클래스에서 강제 구현하도록 한다. 

'프로그래밍 언어 > Java' 카테고리의 다른 글

중첩 클래스  (0) 2023.05.02
인터페이스  (0) 2023.04.20
다형성  (0) 2023.04.18
상속  (0) 2023.04.15
생성자  (0) 2023.04.13
Comments