2 분 소요

생활코딩 강의 정리

JAVA: 객체 지향 프로그래밍 (OOP)

이 글은 아래의 강의를 보고 작성한 포스트 입니다.

1. 남의 클래스 & 남의 인스턴스

Math 클래스

  • PI 변수
  • floor()
  • ceil()

FileWriter 클래스

  • write()
  • close()

실습 코드

package others;

import java.io.FileWriter;
import java.io.IOException;

public class OthersOOP {
    public static void main(String[] args) throws IOException { //예외처리
        System.out.println(Math.PI);
        System.out.println(Math.floor(1.8)); //내림
        System.out.println(Math.ceil(1.8)); //올림

        FileWriter f1 = new FileWriter("data.txt");
        f1.write("hello world");
        f1.close();

        FileWriter f2 = new FileWriter("data2.txt");
        f2.write("hello world");
        f2.close();
    }
}
  • Math의 PI와 floor는 일회성으로 이용, 내부 상태를 계속 유지할 필요가 없음

    -> 메소드나 변수를 클래스에 있는 그대로 사용

  • FileWriter의 write는 내부 상태를 계속 유지해야 함.

    -> 클래스의 복제본을 만들어서 메소드나 변수를 사용

2. 클래스와 인스턴스

클래스

  • 객체를 정의한 틀
  • 객체를 만들기 위한 설계도 역할
  • 객체가 가져야 할 속성(필드)과 기능(메서드)을 미리 정의해 놓은 추상적 개념

인스턴스

  • 클래스라는 설계도를 바탕으로 만들어진 실제 객체
  • 클래스는 추상적이며 실제 메모리에 할당되지 않음. 인스턴스는 new 연산자를 통해 메모리에 생성되어 프로그램 내에서 동작하는 구체적인 존재

예시

클래스가 ‘사람’이라면 인스턴스는 ‘홍길동’이라는 사람

생성자와 this

  • 생성자: 클래스와 똑같은 이름의 메소드를 정의한 것
  • 자바는 생성자가 있으면 이를 먼저 호출함
  • 가장 먼저 실행해야하는 코드를 생성자에 넣음

  • this: 현재 있는 인스턴스를 가리킴

실습코드

package others;

public class MyOOP {
    public static void main(String[] args) {
        Print p1 = new Print("----");
//      p1.delimiter = "----";
        p1.A();
        p1.A();
        p1.B();
        p1.B();

        Print p2 = new Print("****");
 //     p2.delimiter = "****";
        p2.A();
        p2.A();
        p2.B();
        p2.B();

        p1.A();
        p2.A();
        p1.A();
        p2.A();
    }
}
package others;

class Print{

    public String delimiter = "";

    // 생성자(초기필수작업)
    public Print(String delimiter){
        this.delimiter = delimiter;
    } // this : 현재 인스턴스
    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");
    }
}

3. static

클래스 변수와 인스턴스 변수

  • 클래스 변수를 바꾸면 클래스 변수를 공유하는 인스턴스 변수도 바뀐다.

실습코드

package staticTest;

class Foo {
    public static String classVar = "I class var";//클래스 변수
    public String instanceVar = "I instance Var"; //인스턴스 변수
    public static void classMethod() { //클래스 메소드
        System.out.println(classVar); //OK
//        System.out.println(instanceVar); //Error
    }
    public void instanceMethod() { //인스턴스 메소드
        System.out.println(classVar);
        System.out.println(instanceVar);
    }
}
public class StaticApp {
    public static void main(String[] args) {
        System.out.println(Foo.classVar);
//        System.out.println(Foo.instanceVar); //Error

        Foo.classMethod();
//        Foo.instanceMethod(); //Error

        Foo f1 = new Foo();
        Foo f2 = new Foo();
        System.out.println(f1.classVar);
        System.out.println(f1.instanceVar);

        f1.classVar ="changed by f1";
        System.out.println(Foo.classVar);
        System.out.println(f2.classVar);

        f1.instanceVar ="changed by f1";
        System.out.println(f1.instanceVar);
        System.out.println(f2.instanceVar);
    }
}

4. 활용

부가가치세를 계산하는 프로그램

실습코드

package review;
// 클레스화
class Accounting{ // 부가가치세와 관련된 변수/메소드만 존재

    // 공급가액
    public double valueOfSupply;
    public Accounting(double valueOfSupply){ // 부가가치세를 받아옴
        this.valueOfSupply = valueOfSupply;
    }
    // 부가가치세율
    public static double vatRate = 0.1; // 변경될 일이 없음. static으로 두기.

    public double getVAT() { // 부가가치세 계산
        return this.valueOfSupply * vatRate;
    }

    public double getTotal() { // 총 금액
        return this.valueOfSupply + getVAT();
    }
}
public class AccountingApp { // 메인

    public static void main(String[] args) {

        Accounting a1 = new Accounting(10000.0); // 인스턴스화
        Accounting a2 = new Accounting(20000.0);

        System.out.println("Value of supply : " + a1.valueOfSupply);
        System.out.println("Value of supply : " + a2.valueOfSupply);

        System.out.println("VAT : " + a1.getVAT());
        System.out.println("VAT : " + a2.getVAT());

        System.out.println("Total : " + a1.getTotal());
        System.out.println("Total : " + a2.getTotal());

    }

}

댓글남기기