본문 바로가기
Language/JAVA

[JAVA] 객체지향 프로그래밍 7~9 생성자 this / 클래스화 인스턴스화

by 아이엠제니 2022. 2. 9.

부스트코스 생활코딩 [쉽게 배우는 자바2] 공부 기록

 

 

7. 생성자와 this

package javaChapter2_10;

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

        Print p1 = new Print("----");
        p1.A();
    }
}
package javaChapter2_10;

class Print {
    public String delimiter = "";

    public Print(String _delimiter) { //생성자
        delimiter = _delimiter;
    }

    public void A() {
        System.out.println(delimiter);
        System.out.println("A");
        System.out.println("A");
    }

    public void B() {
        System.out.println(delimiter);
        System.out.println("B");
        System.out.println("B");
    }
}

생성자는 클래스 이름과 똑같은 메소드를 정의하면 된다.

 

 

 

package javaChapter2_10;

class Print {
    public String delimiter = "";

    public Print(String delimiter) { //생성자
        this.delimiter = delimiter;
    }

    public void A() {
        System.out.println(this.delimiter);
        System.out.println("A");
        System.out.println("A");
    }

    public void B() {
        System.out.println(this.delimiter);
        System.out.println("B");
        System.out.println("B");
    }
}

this라는 특수한 키워드는 클래스가 인스턴스화 되었을 때 인스턴스를 가르키는 특수한 이름이다.

 

 

 

8-1. 활용 (클래스화)

Before

package javaChapter2_10;

public class AccountingApp {
    // 공급가액
    public static double valueOfSupply;
    // 부가가치세율
    public static double vatRate = 0.1;

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

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

    public static void main(String[] args) {
        valueOfSupply = 10000.0;
        System.out.println("Value of supply : " + valueOfSupply);
        System.out.println("VAT : " + getVat());
        System.out.println("Total : " + getTotal());
    }
}

After

package javaChapter2_10;

class Accounting {
    public static double valueOfSupply;
    public static double vatRate = 0.1;

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

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

public class AccountingApp {

    public static void main(String[] args) {
        Accounting.valueOfSupply = 10000.0;
        System.out.println("Value of supply : " + Accounting.valueOfSupply);
        System.out.println("VAT : " + Accounting.getVat());
        System.out.println("Total : " + Accounting.getTotal());
    }
}

 

 

8.2 활용 (인스턴스화)

클래스를 인스턴스화~!

Before

package javaChapter2_10;

class Accounting {
    public static double valueOfSupply;
    public static double vatRate = 0.1;

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

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

public class AccountingApp {

    public static void main(String[] args) {
        Accounting.valueOfSupply = 10000.0;
        System.out.println("Value of supply : " + Accounting.valueOfSupply);
        System.out.println("VAT : " + Accounting.getVat());
        System.out.println("Total : " + Accounting.getTotal());
    }
}

After

package javaChapter2_10;

class Accounting {
    public double valueOfSupply;
    public static double vatRate = 0.1;

    public double getVat() {
        return valueOfSupply * vatRate;
    }

    public double getTotal() {
        return valueOfSupply + getVat();
    }
}

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

        System.out.println("==== 10,000원 ====");
        Accounting v1 = new Accounting();
        v1.valueOfSupply = 10000.0;
        System.out.println("Value of supply : " + v1.valueOfSupply);
        System.out.println("VAT : " + v1.getVat());
        System.out.println("Total : " + v1.getTotal());

        System.out.println("==== 20,000원 ====");
        Accounting v2 = new Accounting();
        v2.valueOfSupply = 20000.0;
        System.out.println("Value of supply : " + v2.valueOfSupply);
        System.out.println("VAT : " + v2.getVat());
        System.out.println("Total : " + v2.getTotal());
    }
}

v1과 v2가 각자 독립된 상태를 유지하고 있기 때문에!

단지 호출만 해서 안심하고 인스턴스를 사용할 수 있다.

 

영상 보기 전에 스스로 인스턴스화 해봤다.

생각하며 인스턴스화 했고, 다행히 잘 작동했다.

 

 

 

package javaChapter2_10;

class Accounting {
    public double valueOfSupply;
    public static double vatRate = 0.1;

    public Accounting(double valueOfSupply) {
        this.valueOfSupply = valueOfSupply;
    }

    public double getVat() {
        return valueOfSupply * vatRate;
    }

    public double getTotal() {
        return valueOfSupply + getVat();
    }
}

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

        System.out.println("==== 10,000원 ====");
        Accounting v1 = new Accounting(10000.0);
        System.out.println("Value of supply : " + v1.valueOfSupply);
        System.out.println("VAT : " + v1.getVat());
        System.out.println("Total : " + v1.getTotal());

        System.out.println("==== 20,000원 ====");
        Accounting v2 = new Accounting(20000.0);
        System.out.println("Value of supply : " + v2.valueOfSupply);
        System.out.println("VAT : " + v2.getVat());
        System.out.println("Total : " + v2.getTotal());
    }
}

생성자와 this를 활용!

 

 

 

9. 수업을 마치며

객체지향은 알 것 같으면서도 모르겠다.

다만 이전보다 확실히 알게된 건 많다는 것.

될 때마다 짜릿함을 느끼며 했다.

다음은 상속을 할 차례.

잘 해보자.

300x250