[생활코딩] 메소드, 클래스, 인스턴스
#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 복제.. > 코드의 성을 쌓아가는.. 깔끔한 코드!