너무너무 어려워지고 있다...
열심히 하자!!! 🥺🥺
멤버 = 필드 + 메서드
필드와 메서드는 선언하는 방법에 따라 인스턴스 멤버와 클래스 멤버로 구분할 수 있다.
인스턴스 멤버는 객체 생성 후에 사용할 수 있고 클래스 멤버는 객체 생성 없이도 사용할 수 있다.
💡 가만.. 우리 main()
메서드는 생성없이 사용할 수 있었어!! 이 메서드는 클래스 멤버인거야!!!
매번 저장한다면 중복 저장으로 인해 메모리 효율이 매우 떨어지기 때문에 메서드는 메서드 영역에 두고서 모든 인스턴스들이 공유해서 사용한다.
대신 무조건 객체를 생성 즉, 인스턴스를 통해서만 메서드가 사용될 수 있도록 제한을 걸어둔 것입니다.
📌 클래스는 Java
의 클래스 로더에 의해 메서드 영역에 저장되고 사용됩니다.
static
키워드를 사용한다.static
키워드를 사용하여 클래스 메서드로 선언하는 것이 좋다.🚨 여기서 주의할 점!!!!! 🚨
- 클래스 멤버로 선언된 메서드는 인스턴스 멤버를 사용할 수 없다.
- 반대로 인스턴스 멤버로 선언된 메서드는 클래스 멤버를 사용할 수 있다.
- 클래스 멤버는 객체 생성없이 바로 사용 가능하기 때문에 객체가 생성되어야 존재할 수 있는 인스턴스 멤버를 사용할 수 없다.
Car.company = "Audi";
String companyName = Car.setCompany("Benz");
클래스 멤버를 사용하려면 클래스의 이름과 함께 도트(.
: dot) 연산자를 사용하면 된다.
Car car = new Car(); // 객체 생성
car.company = "Ferrari";
String companyName2 = car.setCompany("Lamborghini");
해당 메서드가 실행될 때마다 독립적인 값을 저장하고 관리한다.
지역변수는 메서드 내부에서 정의될 때 생성된다.
해당 메서드가 종료될 때 소멸된다.
지역변수 ↔️ 전역변수
🚨 기본적으로 메서드를 사용하기 위해서는 인스턴스화를 시켜줘야한다.
public class Main {
public static void main(String[] args) {
Main main = new Main(); // Main 안에 생성자로 기본생성자가 내장되어있기때문에 선언할 수 있다.
System.out.println(main.getNumber());
System.out.println(main.getNumber());
}
// 메서드
public int getNumber() {
// 지역변수
int number = 1;
number += 1;
return number;
}
}
상수의 특징은 값이 반드시 한개이며 불변의 값을 의미
➡️ 따라서 인스턴스마다 상수를 저장할 필요가 없다.
static
+ final
같이 붙으면 공용의 상수
static
은 공용적으로 사용하는 느낌
클래스. 이렇게 접근할수 있는 값이니까
보통 Java에서는 camel case로 변수명을 쓰지만 상수는 모두 대문자로 쓴다 ➡️ TEST_VALUE
거의 상수를 쓸 떄는 static final
로 많이 쓴다.
static final
은 절대 바꿀 수 없다 ➡️ 오류 발생