본문 바로가기

객체 지향 프로그래밍 - 클래스

인스턴스 멤버

인스턴스 멤버 선언 및 사용

  • 인스턴스 멤버: 필드와 메소드 등 객체에 소속된 멤버


    출처, 이것이 자바다


this 키워드

  • 객체 내부에서는 인스턴스 멤버에 접근하기 위해 this를 사용. 객체는 자신을 ‘this’라고 지칭
  • 생성자와 메소드의 매개변수명이 인스턴스 멤버인 필드명과 동일한 경우, 인스턴스 필드임을 강조하고자 할 때 this를 주로 사용
package ch06.sec09;

/*
 * 필드 : 인스턴스 필드와 정적(static) 필드
 * this 키워드 : 객체생성시 구성요소를 this.필드, this.메소드로도 접근을 쉽게 가능하도록 지원
               new 연산에 의하여 힙영역에 생성되는 객체 자신을 가리키는 의미

 * 생성자 : 클래스에 생성자 선언이 없으면, 기본생성자는 컴파일과정에서 자동으로 생성된다.
                     반대로 생성자 선언이 존재하면, 기본생성자는 자동으로 생성되지 않는다.
 */

public class Car {
    //this는 Car 클래스를 가리킴
    //필드 선언(인스턴스 필드와 정적(static) 필드)
    String model; //인스턴스 필드(static 이 앞에 안붙음)
    int speed;

    //생성자 선언
    Car(String model) {
        this.model = model;
    }

    //메소드 선언
    void setSpeed(int speed) {
        this.speed = speed;
    }

    void run() {
        this.setSpeed(100);
        System.out.println(this.model + "가 달립니다.(시속:" + this.speed + "km/h)");
    }
}

package ch06.sec09;

public class CarExample {

    public static void main(String[] args) {
        Car myCar = new Car("포르쉐");
        Car yourCar = new Car("벤츠");

        myCar.run();
        yourCar.run();


    }

}

package ch06.sec09.memoryarea;

public class Demo {

    //인스턴스 필드
    int a;
    String str;

    //정적(static)필드 메모리 생성시 new연산자의 제외대상의 되며, 클래스가 최초 사용되는
    //시점에 단 1번만 static영역에 메모리가 생성된다. 공유특징이 있다.
    static int b;

    public static void main(String[] args) {

        //메모리 내용은 main메소드의 내용이 실행될 때 관점으로 설명

        //스택영역에 기억장소가 생성된다.
        int result; //실제데이터를 보관하는 기억장소의 목적으로 생성(기본데이터타입)
        String str; //힙영역에 생성될 주소를 보관하는 기억장소의 목적으로 생성(참조데이터타입)

        //1)스택영역에 기억장소가 생성된다. 힙영역에 생성될 기억장소의 주소를 저장하기위한 목적
        //2)Demo 클래스에서 static키워드를 달고 있는 멤버(필드, 메소드)의 정보가 static영역(method area)에 메모리가 단 한번만 생성
        Demo demo;

        //new 키워드가 작동하며, 힙영역에 인스턴스필드의 int a, String str 필드를 가지고 메모리생성
        demo = new Demo();

        Demo demo2 = new Demo();

    }

}

package ch06.sec09.memoryarea;

/*
 * 은행 대출 예제.
 * 예>시나리오
 *  대출상품
 *   - 대출금액, - 이율(고정금리) 0.3%
 *   대출 명단
 *    - 이름, - 주민번호, - 대출금액  - 이율 : 0.3% 고정ㅇ
 */

public class Loan {

    String name;
    String ssn;
    int loanPrice;
    //static을 안써주면 new연산자가 힙영역에 기억장소를 4번 생성가능
    static double iYul = 0.3; //공유목적

    Loan(String name, String ssn, int loanPrice) {
        this.name = name;
        this.ssn = ssn;
        this.loanPrice = loanPrice;
    }
}

package ch06.sec09.memoryarea;

public class LoanExample {

    public static void main(String[] args) {

        //고객 대출상품 판매 1000명
        Loan loan1 = new Loan("홍길동1", "123456-1234567", 3000);
        Loan loan2 = new Loan("홍길동2", "123456-1234567", 5000);
        Loan loan3 = new Loan("홍길동3", "123456-1234567", 7000);

        System.out.println("대출자: " + loan1.name);
        System.out.println("대출금액: " + loan1.loanPrice);
        //힙영역의 iYul기억장소는 존재하지 않는다.
//        System.out.println("고정이율: " + loan1.iYul);
        System.out.println("고정이율: " + Loan.iYul); //클래스명.멤버필드
    }

}

'객체 지향 프로그래밍 - 클래스' 카테고리의 다른 글

final 필드와 상수  (0) 2023.01.16
정적 멤버  (0) 2023.01.16
메소드 선언과 호출  (0) 2023.01.16
생성자 선언과 호출  (0) 2023.01.16
필드 선언과 사용  (0) 2023.01.16