[JAVA]/생활코딩

[생활코딩] 메소드, 클래스, 인스턴스

hatch 2021. 7. 24. 12:10
728x90
반응형

#210723~210724#메소드#클래스#인스턴스

 

1. 오늘 배운 내용

(메소드, 클래스SW의 구조를 결정하기 때문에 중요! 신체의 뼈대 역할.)

 

1) 메소드

 a. 개념 : 서로 연관된 코드를 Grouping해서 이름을 붙인 정리정돈 상자.

 b. 복잡한 코드에서 빛을 발함. (단축키) Alt + Shift + M

//만들어진 메소드 호출, 실행 코드.
double vat = getVAT(valueofSupply, vatRate); 

//메소드를 만드는 코드
private static double getVAT(double valueofSupply, double vatRate) {
	return valueofSupply*vatRate;
	.....
	}

>> (원래 1억 줄 코드라면) 메소드 안에 1억 줄의 코드가 숨겨진 것.

cf. getVAT는 임의로 붙인 이름, 괄호 안 : 입력값들.

    - 괄호 안 입력값 없애고 싶다? = 전역변수로 쓰면 됨. 이때, 메소드와 호출 코드 괄호 내용 전부 지워야 함.

 

 c. 응용(valueofSupply는 전역변수. 나머지 get~()는 메소드. = 메소드 안 메소드 호출 가능.)

//만든 메소드 호출
print();

//메소드를 만드는 코드
private 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 : "+getDividend1()); //첫 사람의 배당금

 


객체 지향의 양대산맥, 클래스와 인스턴스

 

 

2) 클래스 - 객체..

 a. 개념 : 서로 연관된 변수와 메소드를 Grouping 하고 이름을 붙인 것. - 역시, 정리정돈 상자다!

 b. (이클립스) window - show view - outline > class에 소속된 멤버 리스트(변수, 메소드) 보여줌.

 

 c. 복잡한 프로젝트, 여러 테마의 변수 함께 있음(회계 / ...). ▶ 생산성 저하 요소.  ▶ class가 도와줌(파일의 디렉토리같은 역할.)

  ㄱ. 상위 class(새로운 변수명)으로 main에 있던 < 변수선언, 메소드 전체 > 이동.

  ㄴ. main에 남아있는 변수에는 class의 이름을 붙여주며 소속감 드러냄.

class Accounting {
	public static double valueofSupply;
	public static double vatRate;
	public static double expenseRate;
    	...
  	 }
  
public class AccountingClassApp {
	public static void main(String[] args) {
		
	Accounting.valueofSupply = 10000.0;
	Accounting.vatRate = 0.1;
    	...
	}

 >> 결과는 동일하나 구조는 완전히 달라짐.

 다른 취지 코드와 뒤섞여도, 흔한 이름을 써도 클래스가 다르므로 공존 가능(ex. Accounting.print(); ).

 


 

3) 인스턴스

 a. 개념 : 하나의 class를 복제 ▶ 서로 다른 데이터의 값과 서로 같은 메소드를 가진, 복제본을 만드는 것.

 

 b. 만약, 가끔 class의 내부 상태가 바뀌는 경우 다음 3가지의 방식을 선택할 수 있음.

  ㄱ. 바뀌는 데이터값에 따라 복붙을 반복한다. - 오류 발생 쉬움.

  ㄴ. 기존 클래스 전체를 복사(ctrl+c)후 (클래스 이름)1 / (클래스 이름)2 .. 로 만듦.

        데이터 값이 달라질 때 1 혹은 2 ..로 소속 관계 변경해줌. > 이후 메소드만 호출해도 사용 가능.

       - 복제한 모든 클래스 이름을 변경해줘야 하고 때마다 복붙하기 번거로움.

 

  ㄷ. 클래스 복제(: 클래스 이름 앞에 new를 붙이고 해당 복제본 들어갈 변수 설정.) = 인스턴스

        ex. Accounting(해당 클래스만 들어갈 수 있음) a1(변수명) = new Accounting();

       (기존) Accounting.print(); ▶ a1(설정한 변수명).print();

       새롭게 데이터값을 줄 때마다 클래스 복제후 소속 경로만 다르게 해서 메소드 호출.

       단, 사용하기 위해서 static 빼주어야 함.

public class AccountingClassApp {

	public static void main(String[] args) {
		
		Accounting a1 = new Accounting();
		a1.valueofSupply = 10000.0;
		..
        a1.print();
		
		Accounting a2 = new Accounting();
		a2.valueofSupply = 20000.0;
		a2.vatRate = 0.1;
		a2.print();
		
		a1.print();
	}

 

2. 피드백

- 메소드는 <더보기> 같다. 간단하게 이름 호출해서 바로 쓰는데 그 안에는 긴 내용이 들어있기도 한.

중복되지 않고 한눈에 알아볼 수 있게 이름을 잘 붙이면 활용도 높을듯.

- 자바라는 컴퓨터 언어의 특징, Grouping - .. class 복제.. > 코드의 성을 쌓아가는.. 깔끔한 코드!