본문 바로가기

Language/Java

클래스 (Class)

클래스(class)란 서로 연관된 변수와 메소드를 묶어 놓고 거기에 이름을 붙인 것이다.

 

메소드, 클래스가 중요한 이유는 우리가 소프트웨어를 만들어가는 데에 있어 구조를 결정하기 때문이다. 마치 신체에서 뼈대와 같은 역할을 하는 것이 메소드와 클래스이다.

 

클래스를 잘 활용하면 코드를 정리하고 프로그램의 생산성을 높일 수 있다.

 

가령 이렇게 회계와 관련된 코드가 있다고 할 때,

 

public class AccountingClassApp {

	public static double valueOfSupply;
	public static double vatRate;
	public static double expenseRate;
	public static void main(String[] args) {

		valueOfSupply = 10000.0;
		vatRate = 0.1;
		expenseRate = 0.3;
		print();
        
        // anotherVariable = ...;
        // anotherMethod = ...;
		
	}

	public static void print() {
		System.out.println("Value of supply : " + valueOfSupply);
		System.out.println("VAT : " + getVAT());
		System.out.println("Total : " + getTotal());
		System.out.println("Expense : " + getExpense());
		System.out.println("Income : " + getIncome());
		System.out.println("Dividend 1 : " + getDividend1());
		System.out.println("Dividend 2 : " + getDividend2());
		System.out.println("Dividend 3 : " + getDividend3());
	}

	public static double getDividend3() {
		return getIncome() * 0.2;
	}

	public static double getDividend2() {
		return getIncome() * 0.3;
	}

	public static double getDividend1() {
		return getIncome() * 0.5;
	}

	public static double getIncome() {
		return valueOfSupply - getExpense();
	}

	public static double getExpense() {
		return valueOfSupply * expenseRate;
	}

	public static double getTotal() {
		return valueOfSupply + getVAT();
	}

	public static double getVAT() {
		return valueOfSupply * vatRate;
	}

}

 

이 클래스에 회계와 상관 없는 다른 취지의 메소드가 변수가 있을 수도 있다. 우리가 짜고 있는 프로그램이 복잡한 프로그램이면 돈 계산 외에도 다른 취지의 코드가 섞여있을 수 있다. 메소드와 변수가 너무 많으면 프로그램의 생산성을 급격하게 떨어트리는 방해요소로 작용할 수 있다.

 

이런 상황에서 우리를 구원해주는 도구는 바로 클래스이다. 파일로 치면 디렉토리(directory)의 역할을 하는 것이다.

 

이때 회계 관련 기능을 위한 Accounting이라는 새로운 클래스를 만들고, 그 클래스에 회계와 관련된 변수들과 메소드들을 새로운 클래스의 멤버로 이사시킬 수 있다. 그리고 AccountingClassApp 안에 있는 변수, 메소드들에 'Accounting.'을 앞에 붙여주면 된다.

 

class Accounting {
	public static double valueOfSupply;
	public static double vatRate;
	public static double expenseRate;	
	
	public static void print() {
		System.out.println("Value of supply : " + valueOfSupply);
		System.out.println("VAT : " + getVAT());
		System.out.println("Total : " + getTotal());
		System.out.println("Expense : " + getExpense());
		System.out.println("Income : " + getIncome());
		System.out.println("Dividend 1 : " + getDividend1());
		System.out.println("Dividend 2 : " + getDividend2());
		System.out.println("Dividend 3 : " + getDividend3());
	}
	
	public static double getDividend3() {
		return getIncome() * 0.2;
	}
	
	public static double getDividend2() {
		return getIncome() * 0.3;
	}
	
	public static double getDividend1() {
		return getIncome() * 0.5;
	}
	
	public static double getIncome() {
		return valueOfSupply - getExpense();
	}
	
	public static double getExpense() {
		return valueOfSupply * expenseRate;
	}
	
	public static double getTotal() {
		return valueOfSupply + getVAT();
	}
	
	public static double getVAT() {
		return valueOfSupply * vatRate;
	}
}

public class AccountingClassApp {

	public static void main(String[] args) {

		Accounting.valueOfSupply = 10000.0;
		Accounting.vatRate = 0.1;
		Accounting.expenseRate = 0.3;
		Accounting.print();
		// anotherVariable = ...;
		// anotherMethod = ...;
		
	}
}

 

이렇게 되면 Accounting에 속해있는 valueOfSupply, Accounting에 속해있는 print라는 것을 분명히 함으로써 그 소속관계를 명확하게 할 수 있다. 이렇게 되면 다른 취지의 코드들과 뒤섞여도 상관없고, print()와 같이 흔한 이름의 메소드를 사용해도 같은 이름의 메소드들이 공존할 수 있게 된다. 이것이 객체지향의 핵심인 class 이다.

'Language > Java' 카테고리의 다른 글

main 메소드  (0) 2022.11.10
== vs equals  (0) 2022.11.09
메소드 (Method)  (0) 2022.11.05
상속 (Inheritance)  (0) 2022.11.03
인스턴스  (0) 2022.11.03