728x90
📌 멤버 = 필드 + 메서드
- 인스턴스 멤버 = 인스턴스 필드 + 인스턴스 메서드
- 클래스 멤버 = 클래스 필드 + 클래스 메서드
📌 인스턴스 멤버 & 클래스 멤버
- 필드와 메서드는 선언하는 방법에 따라서 인스턴스 멤버와 클래스 멤버로 구분할 수 있습니다.
- 인스턴스 멤버는 객체 생성 후에 사용할 수 있고 클래스 멤버는 객체 생성 없이도 사용할 수 있습니다.
1. 인스턴스 멤버
📌객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메소드를 의미
- 또한 객체의 인스턴스 필드는 각각의 인스턴스 마다 고유하게 값을 가질 수 있습니다.
- 메서드는 메서드 영역에 두고서 모든 인스턴스들이 공유해서 사용된다.
- 대신 무조건 객체를 생성 즉, 인스턴스를 통해서만 메서드가 사용될 수 있도록 제한을 걸어두었다. (메서드)
2. 클래스 멤버
📌 클래스는 Java의 클래스 로더에 의해 메서드 영역에 저장되고 사용됩니다.
- 이때 클래스 멤버란 메서드 영역의 클래스와 같은 위치에 고정적으로 위치하고 있는 멤버를 의미한다.
- 따라서 클래스 멤버는 객체의 생성 필요없이 바로 사용이 가능하다.
클래스 멤버 선언
- 필드와 메서드를 클래스 멤버로 만들기 위해서는 static 키워드를 사용하면 된다.
- 일반적으로 인스턴스마다 모두 가지고 있을 필요없는 공용적인 데이터를 저장하는 필드를 클래스 멤버로 선언하는것이 좋다
- 또한 인스턴스 필드를 사용하지 않고 실행되는 메서드가 존재한다면 static키워드를 사용하여 클래스 메서드로 선언하는 것이 좋다
⚠️ 주의사항
- 클래스 멤버로 선언된 메서드는 인스턴스 멤버를 사용할 수 없습니다.
- 반대로 인스턴스 멤버로 선언된 메서드는 클래스 멤버를 사용할 수 있습니다.
- 클래스 멤버는 객체 생성없이 바로 사용 가능하기 때문에 객체가 생성되어야 존재할 수 있는 인스턴스 멤버를 사용할 수 없습니다.
클래스 멤버 사용
- 클래스 멤버를 사용하려면 클래스의 이름과 함께 도트(.) 연산자를 사용하면 됩니다.
- 참조형 변수를 사용하여 클래스 멤버에 접근은 가능하지만 추천하지 않습니다.
- 클래스 이름으로 접근하는 것이 좋습니다.
예제)
자동차 클래스
public class Car {
static String company = "GENESIS"; // 자동차 회사 : GENESIS
String model; // 자동차 모델
String color; // 자동차 색상
double price; // 자동차 가격
double speed; // 자동차 속도 , km/h
char gear; // 기어의 상태, P,R,N,D
boolean lights; // 자동차 조명의 상태
public Car() {} // 기본 생성자
double gasPedal(double kmh, char type) {
changeGear(type);
speed = kmh;
return speed;
}
double brakePedal() {
speed = 0;
return speed;
}
char changeGear(char type) {
gear = type;
return gear;
}
boolean onOffLights() {
lights = !lights;
return lights;
}
void horn() {
System.out.println("빵빵");
}
String getCompany() {
return "(주)" + company;
}
static String setCompany(String companyName) {
// System.out.println("자동차 모델 확인: " + model); // 인스턴스 필드 사용 불가
company = companyName;
return company;
}
}
Main 클래스
public class Main {
public static void main(String[] args) {
// 클래스 필드 company 확인
System.out.println(Car.company + "\n");
// 클래스 필드 변경 및 확인
Car.company = "Audi";
System.out.println(Car.company + "\n");
// 클래스 메서드 호출
String companyName = Car.setCompany("Benz");
System.out.println("companyName = " + companyName);
System.out.println();
// 참조형 변수 사용
Car car = new Car(); // 객체 생성
car.company = "Ferrari";
System.out.println(car.company + "\n");
String companyName2 = car.setCompany("Lamborghini");
System.out.println("companyName2 = " + companyName2);
}
}
'JAVA' 카테고리의 다른 글
[JAVA] 생성자 (0) | 2023.05.31 |
---|---|
[JAVA] 지역변수 및 상수 (0) | 2023.05.31 |
[JAVA] 객체의 속성(필드),행위(메서드) (1) | 2023.05.30 |
[JAVA] 객체 생성과 참조형 변수 (0) | 2023.05.29 |
[JAVA] 클래스 설계 (0) | 2023.05.29 |