처음 만나는 클라우드 보안

[JAVA] 간단한 앱 만들기3 (객체와 클래스 개념) 본문

JAVA

[JAVA] 간단한 앱 만들기3 (객체와 클래스 개념)

영민하게 2022. 7. 6. 07:52
반응형

[이전 포스팅] 2022.07.05 - [분류 전체보기] - [JAVA] 간단한 앱 만들기 2 (기능 입히기)

 

[JAVA] 간단한 앱 만들기2 (기능 입히기)

[지난 내용] 2022.07.04 - [분류 전체보기] - [JAVA] 간단한 앱 만들기 (feat. 생활코딩) [JAVA] 간단한 앱 만들기 (feat. 생활코딩) 골목길에서 가장 중요한 것은 속도보다 목적지를 향한 경로이다. 목표: 판

cloudinfosec.tistory.com

지난 포스팅에 이어 이번 포스팅에선 지금까지 작성된 코드에 '클래스'라는 개념을 입힐 차례이다. 이 모든 것은 메서드(Method)라는 개념이 적립된 곳에서 시작되었고, 객체에 이어 클래스까지 개념을 이해하고 코드에 써 볼 것이다.

개념잡기

메소드: 서로 연관된 코드를 모아 이름을 붙인 정리 상자

객체 & 클래스:  서로 연관된 변수와 메서드를 모아 이름을 붙인 정리 상자

*객체와 클래스는 다른 개념이다.


1. 클래스(Class) 도입하기

상단에 class Accointing {  } 추가 => 기존 메서드(Method)들을 새로 만든 Accountung클래스로 이동

(좌) 클래스 없이 메소드만 추가한 기존 코드 (우) 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:" + getExp());
		System.out.println("Income:" + getIncome());
		System.out.println("Dividend 1:" + getDivend1());
		System.out.println("Dividend 2:" + getDivend2());
		System.out.println("Dividend 3:" + getDivend3());
	}

	private static double getDivend1() {
		return getIncome()*0.5;
	}
	private static double getDivend2() {
		return getIncome()*0.3;
	}
	private static double getDivend3() {
		return getIncome()*0.2;
	}

	private static double getIncome() {
		return ValueOfSupply - getExp();
	}

	private static double getExp() {
		return ValueOfSupply*expenseRate;
	}

	private static double getTotal() {
		return ValueOfSupply + getVAT();
	}

	private static double getVAT() {
		return ValueOfSupply*vatRate; //메소드 생성부분
	}
	
}

public class AccountingClassApp {
	
	public static void main(String[] args) {
		Accounting.ValueOfSupply = 10000.0;  // Accounting 클래스에 속한 ValueOfSupply
		Accounting.vatRate = 0.1;  // Accounting 클래스에 속한 vatRate
		Accounting.expenseRate = 0.3;  // Accounting 클래스에 속한 expenseRate
		Accounting.print();
	}
}

 

2. 인스턴스

인스턴스란? 하나의 클래스를 복제해서 서로 다른 데이터의 값과 서로 같은 메서드를 가진 복제본을 만드는 것이다.

상황 가정

하나의 클래스 아래로 서로 다른 메서드 사용이 빈번하게 나타날 때, 클래스를 수정하는 것은 에러를 유발할 가능성이 매우 높음.

상황예시, 고정된 한가지 Class안으로 여러 메소드들이 사용된다.

1. 클래스 복제

기존 클래스를 그대로 복사하여 적용시킨다.

복사한 클래스 1,2 그리고 그 클래스의 메소드가 호출되는 메인 클래스

다만 복사된 클래스를 사용할 경우, 메서드 수정 작업도 하나하나 진행되기 때문에 좋은 방법은 아니다.

 

2. 인스턴스 사용

원본 클래스를 그대로 유지하고 생성자인 'new'를 사용해 새로운 클래스 즉, '인스턴스'를 사용할 수 있다.

인스턴스에 대한 메소드는 이후로 즉시 호출 가능하다.

- 정적 변수 해제

요약: 인스턴스 사용시 'Static'은 지워야 한다.  

  Static을 가진 변수들은 모두  클래스 변수로 선언되어 메모리에 고유한 공간을 할당받게 된다. 따라서 프로그램이 종료될 때까지 어디서나 호출될 수 있는 전역 변수의 역할을 하게 되는데, 지금처럼 인스턴스 내부에서 변수가 각각 선언되는 경우 메모리를 차지하며 고정적인 변수를 사용할 필요가 없다.

 

인스턴스 사용시 Static으로 지정된 전역변수를 모두 해제해준다.

class Accounting{
	public double ValueOfSupply; 
	public double vatRate;  
	public double expenseRate;
	public void print() {
		System.out.println("Value of supply:" +ValueOfSupply);
		System.out.println("VAT:" + getVAT());
		System.out.println("Total:" + getTotal());
		System.out.println("Expense:" + getExp());
		System.out.println("Income:" + getIncome());
		System.out.println("Dividend 1:" + getDivend1());
		System.out.println("Dividend 2:" + getDivend2());
		System.out.println("Dividend 3:" + getDivend3());
	}

	public double getDivend1() {
		return getIncome()*0.5;
	}
	public double getDivend2() {
		return getIncome()*0.3;
	}
	public double getDivend3() {
		return getIncome()*0.2;
	}

	public double getIncome() {
		return ValueOfSupply - getExp();
	}

	public double getExp() {
		return ValueOfSupply*expenseRate;
	}

	public double getTotal() {
		return ValueOfSupply + getVAT();
	}

	public double getVAT() {
		return ValueOfSupply*vatRate; //메소드 생성부분
	}
	
}

public class AccountingClassApp {
	
	public static void main(String[] args) {

		// instance
		Accounting a1 = new Accounting();
		a1.ValueOfSupply = 10000.0;
		a1.vatRate = 0.1;
		a1.expenseRate = 0.3;
		a1.print();

		Accounting a2 = new Accounting();
		a2.ValueOfSupply = 20000.0;
		a2.vatRate = 0.05;
		a2.expenseRate = 0.2;
		a2.print();
		
	}
}

 

자바 프로그래밍 정리

메서드로 구조 잡고 => 메소드와 변수로 이루어진 클래스로 구조잡고 => 클래스를 복제한 인스턴스로 구조를 잡는다.

 

[강좌 링크] http://www.boostcourse.org/certificate/A20220706-125805?langCode=ko 

 

파트너 기업과 함께 설계하고, 7만명이 선택한 인증 교육

Connect Foundation by Naver

www.boostcourse.org

반응형
Comments