인스턴스 필드 + 인스턴스 메서드
객체 생성 후 사용 가능
각각의 인스턴스마다 고유하게 값을 가짐
클래스 필드 + 클래스 메서드
객체 생성 없이도 사용 가능
메서드 영역의 클래스와 같은 위치에 고정적으로 위치하고 있는 멤버
static을 사용하여 선언
주의!!
클래스 멤버로 선언된 메서드는 인스턴스 멤버 사용 불가
인스턴스 멤버로 선언된 메서드는 클래스 멤버 사용 불가
static String company = "GENESIS"; // 자동차 회사 : GENESIS String getCompany() { return "(주)" + company; }
자동차 회사 'GENESIS'로 고정
getCompany()
: 인스턴스 메서드 => 클래스 필드인 company 사용 가능
static String setCompany(String companyName) { // System.out.println("자동차 모델 확인: " + model); // 인스턴스 필드 사용 불가 company = companyName; return company; }
setCompany(String companyName) : 자동차 회사 변경 가능
Car.company = "Audi"; String companyName = Car.setCompany("Benz"); // static이기 때문에 바로 호출
Car car = new Car(); // 객체 생성 car.company = "Ferrari"; // static이기 때문에 인스턴스화X String companyName2 = car.setCompany("Lamborghini");
package week03.staticFolder; public class Main { public static void main(String[] args) { // 클래스 필드 company 확인 System.out.println(Car.company + "\n"); // GENESIS // 클래스 필드 변경 및 확인 Car.company = "Audi"; System.out.println(Car.company + "\n"); // Audi // 클래스 메서드 호출 String companyName = Car.setCompany("Benz"); // static이기 때문에 바로 호출 System.out.println("companyName = " + companyName); // Benz
"Audi"로 변경 전 Car.company = GENESIS
"Audi"로 변경 후 Car.conpany = Audi
"Benz"를 호출했으므로 Car.company = Benz
Car car = new Car(); // 객체 생성 car.company = "Ferrari"; // static이기 때문에 인스턴스화X System.out.println(car.company + "\n"); // Ferrari String companyName2 = car.setCompany("Lamborghini"); System.out.println("companyName2 = " + companyName2); // Lamborghini } }
메서드 내부에 선언한 변수
메서드가 실행될 때마다 독립적인 값을 저장하고 관리
메서드 내부에서 정의될 때 생성되어 메서드가 종료될 때까지만 유지
package week03.sample; public class Main { public static void main(String[] args) { Main main = new Main(); System.out.println(main.getNumber()); // 2 System.out.println(main.getNumber()); // 2 } // 기본 생성자 // public Main() {} -> 생략가능 // 메서드 public int getNumber() { // 지역변수 <--> 전역변수(static) // 해당 메서드가 실행될 때마다 독립적인 값을 저장하고 관리 // 이 자연변수는 메서드 내부에서 정의될 때 생성됨 // 이 메서드가 종료될 때 소멸 int number = 1; number += 1; // number = number + 1 return number; } }
초기값이 저장되면 해당값을 프로그램이 실행하는 도중에는 절대로 수정 불가
반드시 초기값 지정!!
선언
final String company = "GENESIS"; Car car = new Car(); System.out.println(car.company);
필드 타입 앞에 final을 추가하여 필드 선언
만약 car.company = "Benz"; 이렇게 수정하려면 오류 발생
값이 반드시 한 개이며 불변의 값을 의미
인스턴스마다 상수 저장 불필요
static final String COMPANY = "GENESIS"; System.out.println(Car.COMPANY);
final 앞에 static 키워드를 추가하여 모든 인스턴스가 공유할 수 있는 값이 한개이며 불변인 상수 선언 가능
수정이 불가능
Car.COMPANY = "Benz";
이렇게 수정하려하면 오류가 발생일반적으로 상수는 대문자로 작성하는 것이 관례