티스토리 뷰

클래스를 통해 인스턴스를 생성할 때,

각 인스턴스가 갖는 데이터 영역이 있고,

인스턴스들끼리 공유하는 데이터 영역이 있습니다.

 

각 인스턴스가 갖는 데이터인스턴스 변수이고, 인스턴스들간에 공유하는 데이터클래스 변수고 합니다.


인스턴스 변수

class PersonInfo{
	String name;
    int age;
    double height;    
}

인스턴스 변수각 인스턴스마다 갖는 자신만의 데이터 영역합니다.

 

위의 클래스를 이용해서 사람에 대한 인스턴스를 구현한다면

각자의 이름, 나이, 신장을 가지고 있을 것입니다.

 

name Vin Alice
age 12 10
height 130.0 115.5

 


클래스 변수(static variable) - 정적 변수

class Data{
	int value;
    static int count;
}

모든 인스턴스가 공유하는 클래스당 한 개만 생성되는 변수입니다.

 

밑의 코드는 회원을 저장할 때 사용한 방식입니다.

public class MemberRepository {
    private static Map<Long, Member> store = new HashMap<>();
    private static long sequence = 0L; // static 사용

    public Member save(Member member){
        member.setId(++sequence);
        log.info("save: member={}", member);
        store.put(member.getId(), member);
        return member;
    }

sequence라는 클래스 변수를 통해서 몇번째 회원인지 저장합니다.

저장을 할 때 ++sequence를 통해서 값을 늘려주고

 

새로운 저장이 발생 할 때 새로운 sequence라는 변수를 초기화해서 사용하는 것이 아닌

기존의 sequence 값을 가져와서 사용하게 됩니다.

 

회원 수가 늘어날 수록 1, 2, 3, 4 ,5로 계속 늘어납니다.

 

static의 특이한 규칙

static 메소드는 static 메소드와 static 변수만 사용할 수 있습니다.
class Data{
	static int x;
    int y;
    
    void print(){
    	System.out.println("x:" + x);
        System.out.println("y:" + y);
    }
}

non-static method에서는 오류가 발생하지 않습니다.

class Data{
	static int x;
    int y;
    
    static void print(){
    	System.out.println("x:" + x);
        System.out.println("y:" + y); // 에러
    }
}

static 요소가 아닌 y의 경우에는 오류가 발생합니다.

 

변수 뿐만이 아닌 메소드의 경우에도 static으로 설정한 경우에는

static 으로 지정된 메서드가 아니라면 static에서는 부를 수 없습니다.

'CS > JAVA' 카테고리의 다른 글

[잡다한 상식] public의 기능 - 클래스명과 파일명  (0) 2024.12.16
컬렉션 자료구조[JAVA]  (2) 2024.10.29
제네릭 프로그래밍 [JAVA]  (0) 2024.10.25
ArrayList 배열[JAVA]  (0) 2024.10.20
배열 [JAVA]  (0) 2024.10.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함