본문 바로가기
Java/기본 개념 및 클래스

[Java] 28. Static 변수와 원리

글: Song hyun 2024. 4. 18.
728x90
반응형

[Java] 28. Static 변수와 원리

 

 

1. static 변수
static: 프로그래밍에서 중요한 개념 중 하나이다.
-클래스 변수라고도 불린다.
-클래스의 모든 인스턴스가 공유하는 변수이다. 
=즉, 객체가 동일한 static 변수의 값을 공유한다.

 

2. static 변수의 원리 : 왜 static 변수라고 불릴까?

 우리가 자바 프로그램을 실행하면, 프로그램을 수행하기 위해 운영체제로부터 할당받는 메모리들이 존재한다.

그 특성에 따라 영역이 존재하는데, 그 구성요소는 아래와 같다.

 

메모리 영역(JVM Memory, Runtime Data Area)

-메서드 영역->스택->힙 순서로 동작한다.


3. static 변수 연습하기

4-1. 카드 Class를 만들어, static을 이용해 카드마다 고유의 번호 만들기

 

 

package basic.ch12;

public class Card {
	// 멤버 변수, static 변수
	private String name;
	private static int cardNumber = 11111;

	// 생성자
	public Card(String name) {
		this.name = name;
		this.cardNumber = Card.cardNumber;
		Card.cardNumber += 1001;
	}

	// 멤버 함수

	// get, set 작성
	public String getName() {
		return this.name;
	}

	public int getCardNumber() {
		return this.cardNumber;
	}

	public void setName(String name) {
		this.name = name;
	}

	public static void main(String[] args) {
		Card card1 = new Card("신한카드");
		System.out.println(Card.cardNumber);
		Card card2 = new Card("현대카드");
		System.out.println(Card.cardNumber);
		Card card3 = new Card("국민카드");
		System.out.println(Card.cardNumber);
	} // end of main

} // end of class
// 다른 사람의 코드

public class Card {

    //멤버 변수, static 변수
    private static int f_CardNum = 1000;
    private static int s_CardNum = 1000;
    private static int t_CardNum = 1000;
    
    private int f_CardNumber;
    private int s_CardNumber;
    private int t_CardNumber;
    
    private String cardName;

    //생성자
    public Card(String cardName) {
        System.out.println(cardName + "가 발급되었습니다.");
        f_CardNumber = f_CardNum++;
        s_CardNumber = s_CardNum++;
        t_CardNumber = t_CardNum++;
    }
    //멤버 함수

    public void cardNumber() {
        System.out.println("카드번호는 " + f_CardNumber + "-" + s_CardNumber + "-" + t_CardNumber);
    }

    //get, set 작성


    public int getF_CardNumber() {
        return f_CardNumber;
    }

    public void setF_CardNumber(int f_CardNumber) {
        this.f_CardNumber = f_CardNumber;
    }

    public int getS_CardNumber() {
        return s_CardNumber;
    }

    public void setS_CardNumber(int s_CardNumber) {
        this.s_CardNumber = s_CardNumber;
    }

    public int getT_CardNumber() {
        return t_CardNumber;
    }

    public void setT_CardNumber(int t_CardNumber) {
        this.t_CardNumber = t_CardNumber;
    }

    public String getCardName() {
        return cardName;
    }

    public void setCardName(String cardName) {
        this.cardName = cardName;
    }

    //코드 테스트(메인함수)
    public static void main(String[] args) {
        Card card1 = new Card("신한카드");
        card1.cardNumber();

        System.out.println("-----------------------");
        Card card2 = new Card("신한카드");
        card2.cardNumber();

        System.out.println("-----------------------");
        Card card3 = new Card("신한카드");
        card3.cardNumber();
    }

}

 

 

4-2. 회사, 사원 Class를 만들어, 각 사원 객체마다 고유의 사원 번호 할당하기.

 

package basic.ch12;

public class Employee {

	private int employeeId; // 멤버 변수(객체마다 고유의 값을 가져야 한다.)
	private String name;
	private String department;
	private int serialNumber;

	// 요구 조건
	// 사원이 존재하게 될 때마다 고유한 사원 번호를 할당하고 싶다.
	// 단, 사원 번호는 중복되어서는 안된다.

	// static과 멤버 변수에 활용
	// 객체 생성자, 멤버 변수, 함수를 필요하다 호출 또는 초기화 할 수 있다.

	// static과 멤버 변수의 활용
	public Employee(String name) {
		this.name = name;
		this.employeeId = Company.empSerialNumber;
		Company.empSerialNumber++;
	}

	public int getEmployeeId() {
		return employeeId;
	}

	public void setEmployeeId(int employeeId) {
		this.employeeId = employeeId;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getDepartment() {
		return department;
	}

	public void setDepartment(String department) {
		this.department = department;
	}

	public int getSerialNumber() {
		return serialNumber;
	}

	public void setSerialNumber(int serialNumber) {
		this.serialNumber = serialNumber;
	}

}
package basic.ch12;

public class Company {

	public static String companyName = "그린 컴퍼니";
	static int empSerialNumber = 1000;

	// 코드 테스트
	public static void main(String[] args) {
		// 코드의 시작점

		Employee employee1 = new Employee("홍길동");
		System.out.println(employee1.getEmployeeId());
		Employee employee2 = new Employee("임꺽정");
		System.out.println(employee2.getEmployeeId());
		Employee employee3 = new Employee("신사임당");
		System.out.println(employee3.getEmployeeId());

	}

}
728x90
반응형