KH자바수업_5_클래스와 객체 2
이론_JAVA
this 예약어
this는 인스턴스 스스로를 가리키는 예약어이다.
자신의 메모리를 가리키며, 생성자에서 다른 생성자를 호출하고, 자신의 주소를 반환하기도 한다.
자신의 메모리를 가리키는 this
클래스를 생성하고 자신의 메모리 주소를 출력하는 메소드를 this를 사용해서 만들어 보았다.

매개변수의 이름과 멤버변수의 이름이 같을 때 this를 사용하면 구분할 수 있다.
같은 클래스 안에 있기 때문에 멤버 변수에 private를 붙여도 가능하다.

아래는 출력 화면이다.

같은 메모리 주소를 가리킨다.
this로 다른 생성자 호출하기
매개변수의 개수가 다른 생성자를 this예약어를 사용해서 호출한 코드이다.

여기서 주의할 점이 있다.
this로 다른 생성자를 호출할 때는 실행되는 첫번째 line이어야만 한다.
그렇지 않게 되면 에러가 나타난다.

여기에선 에러가 안나타나지만

이 코드에선 나타난다.
객체 간의 협력
Student, Bus, Subway 클래스를 생성하고, 각 객체 간의 협력이 이루어지는 과정을 알아보자.
학생이 버스를 탈 때 돈을 내고, 지하철을 탈 때 돈을 낸다. 버스의 승객 수, 지하철의 승객 수를 객체로 관리하고 학생의 남은 돈을 관리할 수 있도록 코드를 구현해 보자.
각 클래스의 멤버 변수(인스턴스 변수)는 private로 접근제어자를 설정하고 구현한다.

Student.class

Bus.class

Subway.class

main함수가 존재하는 TakeTrans.class
멤버 변수(인스턴스 변수)를 메소드를 통해 접근할 수 있지만, 접근하려면 getter,setter 메소드를 구현해야 한다.
버스를 탄다면 버스에서는 승객 수가 증가하고, 버스의 money가 증가한다. 또한 버스를 탄 Student 인스턴스의 money는 감소한다.
지하철도 마찬가지로 승객 수가 증가하고, 지하철의 money가 증가하며, 지하철을 탄 Student 인스턴스의 money는 감소한다.

james도 subway를 타도록 구현해보고 결과값을 출력해보자.

james의 돈이 또 줄었고, 2호선의 승객과 수입은 증가한 것을 볼 수 있다
static 메서드
클래스 메서드라고도 함
메서드에 static 키워드를 사용하여 구현
주로 static 변수를 위한 기능 제공
static 메서드에서 인스턴스 변수를 사용할 수 없음
static 메서드도 인스턴스의 생성과 관계 없이 클래스 이름으로 직접 메서드 호출

package com.kh._static;
public class StudentTest {
public static void main(String[] args) {
Student studentLee = new Student();
studentLee.setStudentId(1331);
System.out.println(Student.getSerialNum());
studentLee.setSerialNum(1234);
Student studentSon = new Student();
studentSon.setStudentId(1234);
System.out.println(Student.getSerialNum());
}
}
변수의 유효 범위
변수 유형에 따른 용도
| 변수 유형 | 선언 위치 | 사용 범위 | 메모리 | 생성과 소멸 |
|---|---|---|---|---|
| 지역 변수 (로컬 변수) | 함수 내부에 선언 | 함수 내부에서만 사용 | 스택 | 함수가 호출될 때 생성되고 함수가 끝나면 소멸함 |
| 멤버 변수 (인스턴스 변수) | 클래스 멤버 변수로 선언 | 클래스 내부에서 사용하고 private이 아니면 참조 변수로 다른 클래스에서 사용 가능 | 힙 | 인스턴스가 생성될 때 힙에 생성되고, 가비지 컬렉터가 메모리를 수거할 때 소멸됨 |
| static 변수 (클래스 변수) | static 예약어를 사용하여 클래스 내부에 선언 | 클래스 내부에서 사용하고 private이 아니면 클래스 이름으로 다른 클래스에서 사용 가능 | 데이터 영역 | 프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸됨 |
Static 응용 - 싱글톤 패턴
객체 지향 프로그램에서 인스턴스를 단 하나만 생성하는 디자인 패턴이다.
싱글톤 패턴으로 회사 클래스를 생성해보자.
1. 생성자를 private로 만들기
private Company() {}
2. 클래스 내부에 static으로 유일한 인스턴스 생성하기
private static Company instance = new Company();//유일하게 생성한 인스턴스.
3. 외부에서 참조할 수 있는 public 메소드 만들기
public static Company getInstance() {
if(instance==null) {
instance = new Company();
}
return instance;
}
4. 실제로 사용하는 코드 만들기
package com.kh.singleton;
public class CompanyTest {
public static void main(String[] args) {
//클래스명으로 접근.
Company company1 = Company.getInstance();
Company company2 = Company.getInstance();
System.out.println(company1);
System.out.println(company2);
System.out.println(company1==company2);
}
}
//실행 결과
com.kh.singleton.Company@6b57696f
com.kh.singleton.Company@6b57696f
true
인스턴스를 여러개 만들어도 같은 주소를 참조한다는 것을 알 수 있다 -> 한 개 밖에 생성하지 못한다.
댓글
댓글을 불러오는 중…