본문 바로가기
Kosta DevOps 과정 280기/Java

Class-3

by 롯슈83 2024. 5. 17.

클래스 변수와 클래스 메소드

정의

  • 클래스 변수는 멤버변수명 앞에 static 키워드가 붙은 변수를 말하며 모든 객체가 공동으로 사용할 기억공간이 필요하거나 객체와 무관하게 사용할 수 있는 변수입니다.
  • 클래스 메소드는 멤버변수에 접근할 수 없다.==>static 멤버에만 접근할 수 있다.(private 가 아닌 변수도 사용불가)
  • 클래스 메소드는 멤버메소드 앞에 static 키워드가 붙은 메소드를 말하며 객체와 무관하게 사용할 수 있는 메소드를 말한다.
  • 위의 클래스에서 name,age는 클래스의 멤버변수이며, 반드시 객체를 생성해야만 사용할 수 있고 또 객체마다 별도의 메모리 공간이 잡힌다. 
  • pro() 메소드 역시 반드시 객체를 생성하고 그 객체를 통해서 호출할 수 있다. 그런데 만약 객체와 무관하게 사용하고자 하는 변수가 필요하다면 변수이름 앞에 static 키워드를 붙여 변수를 만들게 되면 객체와 무관하게 또, 모든 객체가 동일한 기억 장소로 사용할 수 있다. 객체와 무관하게 사용해야하기 떄문에 클래스 이름을 접근한다. 그래서 "클래스 변수", "클래스 메소드"라고 한다. 
  • 자동으로 초기화 되어있다.
package com.kosta.exam29;

public class Family {
	private String name;
	private int age;
	public static String addr;
	//객체 없이도 써야하므로 public 이여야 한다.
	
	public Family(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public Family() {}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void info() {
		System.out.printf("이름: %s\n나이: %d", name, age);
	}
	public static void pro() {
		//name = "홍길동"; ==> 불가함
		System.out.println("pro입니다.");
	}
}
package com.kosta.exam29;

public class FamilyTest {
	public static void main(String[] args) {
		//static 키워드가 붙어 있는 멤버 변수는 객체와 무관하게 사용할 수 있다.
		//객체가 생성되지 않았으므로 클래스 이름으로 접근한다.==> 클래스 변수
		//아직 Family 를 생성하지 않은 상태
		Family.addr = "서울시 종로구 관철동";
		System.out.println(Family.addr);
		
		Family f1 = new Family("홍길동", 30);
		Family f2 = new Family("홍수니", 5);
	//	Family.name = "홍길동"; --> 안됨.
		System.out.println("----------------------------------");
		System.out.println(f1.getName()+","+f1.addr);
		System.out.println(f2.getName()+","+f2.addr);
		
		//f1을 통해서 addr을 바꾸면 f2의 addr을 찍어봐도 바뀌어있ㄲ다.
		System.out.println("----------------------------------");
		f1.addr = "제주도 서귀포시";
		System.out.println(f1.getName()+","+f1.addr);
		System.out.println(f2.getName()+","+f2.addr);
		
		Family.pro();
		f1.pro();
	}
}

++toString()

  • 자바 클래스의 제일 조상인 Object의 메소드로, 객체가 가진 설명을 String 형태로 반환할 수 있다.
  • 객체가 어떤 속성들로 구성되어있는지 말하고 싶을 때, 이용할 수 있다.(getInfo 함수도 이용 가능)
  • toString을 정의하지 않았을 때는 주소값이 나온다.
package com.kosta.exam26;

public class Person {
	private String name;
	private int age;
	
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public Person() {}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	public String toString() {
		//String result = "이름 : "+name+"나이, "+age;
		//return result;
		return "[이름 : "+name+", 나이 : "+age+"]";
	}
	
	
}
package com.kosta.exam26;

public class PersonTest {
	public static void main(String[] args) {
		Person p1= new Person("홍길동", 20);
		Person p2= new Person("김유신", 21);
		System.out.println(p1.getName());
		System.out.println(p1.getAge());
		System.out.println(p1);
		System.out.println(p2);
	}
}

(toString 으로 정의하지 않았을 때 p1 과 p2의 값)

'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글

객체 지향 프로그래밍 특징2 - 상속성  (0) 2024.05.20
메소드 중복(Method Overloading)  (0) 2024.05.20
Class-2  (0) 2024.05.16
Class-1  (0) 2024.05.16
메소드 호출  (0) 2024.05.16