Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 IT일지

정적 멤버 본문

프로그래밍 언어/Java

정적 멤버

세레프 2023. 4. 8. 06:09

 클래스특성을 블록에 변수와 메서드를 통해 표현되며, 객체를 생성하기 위한 틀이 된다. 즉, 객체는 클래스의 특성이 포함되어 있다. 

 클래스 선언을 통해 생성 클래스는 new연산자를 통해 객체를 생성하고, 도트연산자를 통해 해당 객체의 특성을 호출한다.

클래스 선언 객체 선언 객체 특성 호출
class 클래스명{

    변수           
    메서드   
    ...  

}
클래스명 참조변수 = new 클래스명(); 참조변수.멤버 명

 하나의 클래스를 통해 객체를 여러개를 생성할 수 있다. 이 경우에 만들어진 객체는 서로 독립적인 존재가 된다. 하지만 각각 객체의 변수중 몇몇의 값이 같은경우, 각 객체마다 해당 변수를 공용으로 사용할 수 있는 방법이 존재하는데, 정적멤버

를 사용하는 것이다.

 

 

정적 멤버

 정적 멤버클래스를 통해 생성된 객체들이 공유하는 멤버로, 객체를 생성하지 않고 사용할 수 있는 변수와 메소드를 말한다. 그리고 해당 변수와 메소드를 정적 변수와 정적 메소드라고 부른다.

 

 대표적인 예시가 "java.lang"패키지에 있는 "System"클래스의 "out"변수가  정적 변수의 예시이다. "java.lang"패키지에 있는 "System"클래스를 보면 "out" 변수를 다음과 같이 코딩되어 있다.

public static final PrintStream out = null;

 이는 PrintStream 타입으로 out이라는 참조 변수를 선언하는 것으로, "final"로 인해 "out"변수의 값은 "null"로 고정되고, "static"을 통해 다른 .java 파일에서 해당 코드를 객체 생성 없이 사용할 수 있다. 그래서 PrintStream타입인 "System.out"변수를 별도의 객체 선언 없이 다른 파일에서 사용할 수 있는 것이고, "PrintStream"클래스에 있는 "println"메서드를 사용하는 것이다. 

 

 참조 변수의 주소값  "null"
 참조변수에 null이 저장되는 것은 힙 영역에 있는 객체를 참조변수에 참조하지 않는다는 뜻이다. 즉, 래스의 인스턴스 멤버(객체를 생성해야 사용할 수 있는 멤버)는 호출할 수 없으며, 정적 멤버만 호출 할 수 있게 된다.

 

 

 정적멤버를 만드는 방법은 멤버를 생성할 때, static키워드를 추가하면 된다.  이때 정적 메서드에서 사용되는 변수는 해당 메서드 내에서 선언한 변수이거나 정적변수이여야 한다.

  class 클래스명{

    static 타입 변수;
    static 타입 메서드;

}
 

 

package pack0407;

class Member{
	static String centerName;
	String name;
	int age;
	String gender;
	
 void info() {
		System.out.println("center name:"+centerName);
		System.out.println("name:"+name);
		System.out.println("age :"+age);
		System.out.println("gender:"+gender);				
	}
}
package pack0407;

public class Code1 {

	public static void main(String[] args) {
		Member member1 = new Member();
		Member member2 = new Member();
		Member member3 = new Member();
			
		member1.centerName = "Java";
		member1.name = "김철수";
		member1.age =28;
		member1.gender = "남성";
		
		member2.centerName = "Python";
		member2.name = "이미자";
		member2.age =45;
		member2.gender = "여성";
		
		member3.centerName = "Code C";
		member3.name = "이정석";
		member3.age =15;
		member3.gender = "남성";
		
		System.out.println("member1-------");
		member1.info();
		System.out.println("member2-------");
		member2.info();
		System.out.println("member3-------");
		member3.info();
	}
}

 위의 결과를 보면 알 수 있듯이, 인스턴스 변수객체마다 다른 값을 저장하지만, 정적 변수 객체가 달라도 같은 값이 저장 되어 있는 것을 확인 할 수 있다.

 즉, 인스턴스 변수객체를 생성할 때 마다 생성되지만, 정적변수객체를 생성한다고 해도 생성되지 않고, 클래스가 생성될 때 같이 생성이 된다. 그래서 정적변수에 값이 수정 되면, 해당 클래스를 통해 만들어진 객체의 해당 변수의 값이 같이 변경이 되는 것이다.

 이때, 정적변수의 값을 수정할 때, 참조변수를 통해 접근할 수 있지만 클래스명을 통해서 접근할 수 있다.

클래스명. 필드명 

그리고 이 형식을 이용하면, 객체를 생성하지 않고 해당 필드를 호출할 수 있다.

package pack0407;

public class Code1 {

	public static void main(String[] args) {
		Member member1 = new Member();
		Member member2 = new Member();
        
		Member.centerName = "Java";
		member1.name = "김철수";
		member1.age =28;
		member1.gender = "남성";
		
		member2.name = "이미자";
		member2.age =45;
		member2.gender = "여성";
		
		System.out.println("member1-------");
		member1.info();
		System.out.println("member2-------");
		member2.info();

	}
}

 

 


인스턴스 멤버

 인스턴스 멤버객체마다 가지고 있는 멤버로, 인스턴스(객체)를  생성한 후 사용할 수 있는 변수와 메소드를 말한다. 그리고 해당 변수와 메소드를 인스턴스 변수, 인스턴스 메소드라고 부른다. 

 인스턴스 멤버를 만드는 방법은 기존 방식과 동일한 방식으로 생성한다.

  class 클래스명{

    타입 변수
    타입 메서드

}
 

 

'프로그래밍 언어 > Java' 카테고리의 다른 글

생성자  (0) 2023.04.13
객체 배열  (0) 2023.04.11
클래스  (0) 2023.04.07
객체 지향 프로그래밍  (0) 2023.04.06
메서드 오버로딩  (0) 2023.04.05
Comments