[Java] 인스턴스 멤버, 클래스 멤버, 지역변수, 상수

CountryGirl·2023년 5월 30일
0

Java

목록 보기
5/18
post-thumbnail

너무너무 어려워지고 있다...
열심히 하자!!! 🥺🥺


📌 인스턴스 멤버 VS 클래스 멤버

멤버 = 필드 + 메서드

  • 인스턴스 멤버 = 인스턴스 필드 + 인스턴스 메서드
  • 클래스 멤버 = 클래스 필드 + 클래스 메서드

    필드와 메서드는 선언하는 방법에 따라 인스턴스 멤버와 클래스 멤버로 구분할 수 있다.
    인스턴스 멤버는 객체 생성 후에 사용할 수 있고 클래스 멤버는 객체 생성 없이도 사용할 수 있다.

💡 가만.. 우리 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;
    }
}

📝 상수

상수의 특징은 값이 반드시 한개이며 불변의 값을 의미
➡️ 따라서 인스턴스마다 상수를 저장할 필요가 없다.

  • final 필드는 초기값이 저장되면 해당값을 프로그램이 실행하는 도중에는 절대로 수정할 수 없다.
  • 반드시 초기값을 지정해야한다.

static + final

같이 붙으면 공용의 상수
static은 공용적으로 사용하는 느낌
클래스. 이렇게 접근할수 있는 값이니까

보통 Java에서는 camel case로 변수명을 쓰지만 상수는 모두 대문자로 쓴다 ➡️ TEST_VALUE
거의 상수를 쓸 떄는 static final 로 많이 쓴다.
static final은 절대 바꿀 수 없다 ➡️ 오류 발생

profile
💻🌾시골소녀의 엉망징창 개발 성장일지🌾💻 (2023.05.23 ~)

0개의 댓글

관련 채용 정보