+인스턴스 멤버와 정적멤버

조영혜·2022년 1월 18일
0

인스턴스 멤버 : 객체를 생성한 수 사용할 수 있는 필드와 메소드.

인스턴스 필드 : 힙영역의 객체마다 가지고 있는 멤버, 객체마다 다른 데이터를 저장.
인스턴스 메소드 : 객체가 있어야 호출 가능한 메소드. 클래스 모드(메소드 영역)에 위치하지만 이해하기 쉽도록 객체마다 가지고 있는 메소드라고 생각해도 됨.

  • this : 객체 내에서 인스턴스 멤버에 접근하기 위해 사용. 생성자와 메소드의 매개변수이름이 필드와 동일한 경우, 필드임을 지정하기 위해 주로 사용.
car(String model){
this.model=model;
}
void setModel(String model){
this.model=model;
}
//매개변수인 model을 필드인 model에 저장. 
//this.model에서 model은 필드인 model을 말함. 명확하게 지정해주기위함! 필드임을 강조하기 위해서! 
//model=model; 한다면 매개변수의 값을 매개변수에 넣는 꼴. 
//만약 매개변수의 이름과 필드의 다르다면 그냥 Model=m; 해도됨. 

정적 멤버 : 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드.

정적필드 및 상수 : 객체없이 클래스 만으로도 사용 가능한 필드.
정적 메소드 : 객체가 없이 클래스만으로도 호출 가능한 메소드.

클래스.필드;
클래스.메소드(매개값, ...);
//클래스 이름과 함께 도트연산자로 접근. 
  • static : 정적메소드
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 필드 : 객체에 한번 초기화된 데이터를 변경 불가로 만들 경우.

final 타입 필드 [=초기값]; ex.주민등록번호

정적 final 필드 : 불변의 값인 상수 만들 때. (모두 대문자로 하는 게 관례)

static final 타입 상수 = 초기값; 

0개의 댓글