본문 바로가기
☕Java/Java 기본

Java 클래스, 추상클래스, 인터페이스

by 캔 2021. 5. 21.

자바의 객체 지향에서 가장 중요한 것이 클래스이다. 자바의 모든 코드들이 클래스로 이뤄져 있다. 변수와 메서드를 기능과 역할에 따라 묶어 놓은 것이 클래스이다. 클래스는 객체 지향 언어에서 추상화의 기본 단위가 된다.

package Day4;

public class Shopping {
	public int money = 10000;//가진 돈을 나타낸는 money(int형) 변수
	
	public void buy(int price) {//사는 행위를 나타내는 buy 메서드
		money = money - price;
	}
	
	public void sell(int price) {//파는 행위를 나타내는 sell 메서드
		money = money + price;
	}
}

위 코드는 쇼핑이라는 클래스를 만든 것이다. 쇼핑을 할 때 필요한 변수와 메서드를 생각해보자. 자기가 가진 돈(money)과 물건을 사는(buy) 행위, 파는(sell) 행위로 구성된다. int형의 money 변수와 buy, sell 메서드를 묶어서 Shopping이라는 클래스를 만들었다.

 

위 코드에서는 변수 값이 지정되어 있고 buy나 sell의 메서드에서 수행할 작업이 구체화되어 있다. 이를 지정하지 않고 좀 더 추상적으로 만들어 놓은 것이 추상 클래스이다.

package Day1;

//추상 클래스
public abstract class Shopping {
	public int money;
	
	public void buy(int price) {
		money = money - price;
	}
	
	public abstract void sell();
}

추상 클래스를 선언할 때는 클래스 앞에 abstract 키워드를 붙여서 클래스를 만든다. 추상 클래스는 일반 멤버 변수, 일반 메서드, 추상 메서드를 가질 수 있다. 위에서 money 변수는 일반 멤버, buy는 일반 메서드, sell은 추상 메서드이다.

 

추상 클래스의 일종으로 인터페이스란 것이 있다.

package Day1;

public interface Shopping {
	int money = 0;//static final은 생략, 프로그램 시작 시 정해지는 상수이므로 초기화가 필요하다.
	
	void buy(int price);// abstract 생략
	
	void sell(int price);// abstract 생략
}

인터페이스는 추상 클래스와 다르게 static final 변수와 추상 메서드만을 가진다. static final은 상수를 만드는 키워드이기 때문에 상수와 추상 클래스만을 가진다고 말할 수 있다. 변수와 메서드를 선언해도 각각 static final 변수와 추상 메서드가 되기 때문에 각각 static final과 abstract 키워드는 생략해도 자동으로 상수와 추상 메서드로 인식하게 된다. 상수는 프로그램 시작 시에 생성이 되어야 하므로 0으로 초기화해주었다.

 

추상 클래스와 인터페이스 모두 클래스의 구조를 추상화하는 역할을 한다. 변수 이름이나 타입, 메서드의 이름이나 매개변수, 내용은 정해져 있지 않기 때문에 다른 클래스가 상속한 뒤에 변수를 호출하여 사용하거나 메서드의 경우 오버라이드하여 사용하게 된다.

 

추상 클래스와 인터페이스의 내용을 정리하면 다음과 같다.

추상클래스   인터페이스
불가 자체 객체 생성 불가
가능 Upcasting 가능 여부 가능
일반 멤버 변수,
일반 멤버 메서드,
추상메서드
멤버 static final 변수,
추상 메서드
extends 상속(구현) 키워드 implements
불가(단일 상속만) 중복 상속 가능 여부 가능

 

'☕Java > Java 기본' 카테고리의 다른 글

[20210521] Java 예외 처리  (0) 2021.05.21
[20210521] Java 자료구조, 반복자  (0) 2021.05.21
Java 조건문, 반복문, 탈출문  (0) 2021.05.21
Java 변수와 배열  (0) 2021.05.20
Java 기본 입출력  (0) 2021.05.20