[그룹 스터디 #1] 객체 지향 입문

HJoo·2022년 12월 20일
0

GroupStudy

목록 보기
1/2
post-thumbnail

12/21일 그룹스터디 발표 내용 정리

변수별 메모리 사용 위치


  • 과정
    main함수 내에서 참조변수로 새로운 인스턴스가 new 되었을 때
    heap 메모리에는 new된 인스턴스들이 생성되고
    stack 메모리에는 사용된 함수와 메서드의 지역변수들이 생성된다
    stack 메모리에서 new할 때 생성된 지역변수는 heap메모리의 주소를 갖는다
    set~ 메서드를 사용하면 그 함수에 해당하는 stack 메모리가 생성이 되고,
    그 안에 this라는 키워드가 갖게 되는 값은 heap 메모리의 인스턴스들을 가리킨다
  • static 변수/메서드는 인스턴스 생성과 무관하게, 프로그램이 시작될 때 메모리가 할당 된다

static을 응용한 싱글톤 패턴

  • 프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 패턴
  • 방법
  1. 생성자는 private으로 선언
  2. 클래스 내부에 유일한 private 인스턴스 생성
  3. 외부에서 유일한 인스턴스를 참조할 수 있는 public 메서드 제공

static/싱글톤 실습

  • 자동차 공장이 있습니다. 자동차 공장은 유일한 객체이고, 이 공장에서 생산되는 자동차는 제작될 때마다 고유의 번호가 부여됩니다.
    자동차 번호가 10001부터 시작되어 자동차가 생산될 때마다 10002, 10003 이렇게 번호가 붙도록 자동차 공장 클래스, 자동차 클래스를 구현하세요
    다음 CarFactoryTest.java 테스트 코드가 수행 되도록 합니다.

  • 테스트 클래스

public class CarFactoryTest {

	public static void main(String[] args) {
		CarFactory factory = CarFactory.getInstance();
		Car mySonata = factory.createCar();
		Car yourSonata = factory.createCar();
		
		System.out.println(mySonata.getCarNum());     //10001 출력
		System.out.println(yourSonata.getCarNum());   //10002 출력
	}
}
  • 공장 클래스 - Factory
  1. 공장 생성자를 static으로 선언
  2. createCar 메서드 만들기 - Car 클래스에서 생성자로 생성된 거 가져옴
  3. getInstance만들기
public class Factory {

    private static Factory instance = new Factory();

    private Factory(){

    }
    public Car createCar(){
        return new Car();
    }

    public static Factory getInstance(){
        if (instance == null){
            instance = new Factory();
        }
        return instance;
    }
}
  • 자동차 클래스 - Car
  1. 자동차 번호를 static으로 선언
  2. 시리얼번호 static으로 생성
  3. 자동차 생성될 때 자동차 시리얼 번호 부여
  4. getCarNum() 메서드 만들기 - 시리얼번호 반환
public class Car {
    public int carNum;
    private static int serial = 10000;

    public Car(){
        serial++;
        this.carNum = serial;
    }

    public int getCarNum(){
        return this.carNum;
    }
}
profile
안녕하세요. Chat JooPT입니다.

0개의 댓글