인스턴스 필드 : 힙영역의 객체마다 가지고 있는 멤버, 객체마다 다른 데이터를 저장.
인스턴스 메소드 : 객체가 있어야 호출 가능한 메소드. 클래스 모드(메소드 영역)에 위치하지만 이해하기 쉽도록 객체마다 가지고 있는 메소드라고 생각해도 됨.
car(String model){
this.model=model;
}
void setModel(String model){
this.model=model;
}
//매개변수인 model을 필드인 model에 저장.
//this.model에서 model은 필드인 model을 말함. 명확하게 지정해주기위함! 필드임을 강조하기 위해서!
//model=model; 한다면 매개변수의 값을 매개변수에 넣는 꼴.
//만약 매개변수의 이름과 필드의 다르다면 그냥 Model=m; 해도됨.
정적필드 및 상수 : 객체없이 클래스 만으로도 사용 가능한 필드.
정적 메소드 : 객체가 없이 클래스만으로도 호출 가능한 메소드.
클래스.필드;
클래스.메소드(매개값, ...);
//클래스 이름과 함께 도트연산자로 접근.
public class Calculator {
static double pi = 3.141592;
static int plus (int x, int y)
return x+y;
static int minus (int x, int y)
return x-y;
}
double result1 = 10*10*Calculator.pi;
int result2 = Calculator.plus(10,5); //x와 y에 대입값.
int result3 = Calculator.minus(10,5);
=> result1 314.1592
result2 15
result3 5
객체마다 다를 수 있는 필드값->인스턴스 필드
객체마다 다를 필요가 없는(동일한 값 하나만 만들어서 공유할 수 있을 때) 필드값->정적필드로 선언.
메소드 블록에 인스턴스 필드 또는 인스턴스 메소드 사용할 경우->인스턴스메소드 선언
그렇지 않을 경우->정적메소드 선언.
정적메소드 이용 시 객체 관련된 거(this) 다 안됨-> 하고 싶으면 객체 우선 생성 후)참조변수로 접근해야함! 아니면 static 붙이기.
public class Car{
int speed;
static void run() {
Car mycar = new Car();
myCar.speed = 60;
}
public static void mine(String[] args){
Car mycar=new Car(); //객체생성
myCar.speed=60;
myCar.run();//참조변수로 접근
클래스 외부에서 new연산자 통해 생성자 호출하는 것을 불가하도록 private접근제한자 사용.
자신의 타입인 정적필드 선언 후 자신의 객체 생성해 초기화.
외부에서 호출할 수 있는 gentlnstacne()선언.
정적필드에서 참조하는 자신의 객체 리턴.
//정적필드
private static 클래스 singleton = new 클래스();
//생성자
private 클래스(){}
//정적메소드
static 클래스 getInstance(){
return singleton;
}
단순 값일 경우 필드 선언 시 초기화. (주로 정적 필드(상수)일 때)
객체 생성 시 외부 데이터로 초기화 필요한 경우 새엇ㅇ자에서 초기화(주로 인스턴스 필드일 때)
인스턴스 final 필드 : 객체에 한번 초기화된 데이터를 변경 불가로 만들 경우.
final 타입 필드 [=초기값]; ex.주민등록번호
정적 final 필드 : 불변의 값인 상수 만들 때. (모두 대문자로 하는 게 관례)
static final 타입 상수 = 초기값;