인스턴스 멤버 선언 및 사용
- 인스턴스 멤버: 필드와 메소드 등 객체에 소속된 멤버
출처, 이것이 자바다
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 |