클래스 변수와 클래스 메소드
정의
- 클래스 변수는 멤버변수명 앞에 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 |