Skip to content

Latest commit

 

History

History
200 lines (158 loc) · 4.39 KB

File metadata and controls

200 lines (158 loc) · 4.39 KB

6-5 인스턴스 멤버와 정적 멤버

정의

  1. 인스턴스 멤버 : 객체마다 가지고 있는 멤버

  2. 정적 멤버 : 클래스에 위치시키고 객체들이 공유하는 멤버

for 메모리 낭비를 방지하기 위함

생각해보기. 필드값이 달라지게 된다면 객체마다 가지고 있는게 맞는가? 필드값이 같은 객체라면?

  1. 싱글톤 : 단 하나의 객체만 생성을 해야하는 프로그램에서 이 객체를 부르는 이름

  2. final 필드 : 초기값이 저장되면 최종적인 값이 되어서 프로그램 실행 도중에 수정 불가

  3. 상수: 불변의 값, 객체마다 저장할 필요가 없는 공용성을 지녔고 여러 값으로 초기화 X

인스턴스 멤버

인스턴스 멤버 선언

앞에서 배운 것들은 다 거진 인스턴스 필드와 인스턴스 메소드였다.

public class car{
  //필드
  int gas;
  
  //메소드
  void setSpeed(int speed){...}
}

Car myCar = new Car();
myCar.gas = 10;
myCar.setSpeed(60);

Car myDaddyCar = new Car();
myDaddyCar.gas = 30;
myDaddyCar.setSpeed(100);

중요 image

인스턴스 멤버와 this

public class car{
  //필드
  String model;
  int speed;
  
  //생성자
  Car(String model){
    this.model = model;
  }
  
  //메소드
  void setSpeed(int speed){
    this.speed = speed
  }
  
  void run(){
    for(int i=10; i<=50; i+=10){
      this.setSpeed(i);
      System.out.println(this.model + "가 달립니다.(시속:" + this.speed + "km/h)");
    }
  }
}
package sec05.exam01;

public class CarExample {
  public static void main(String[] args) {
    Car myCar = new Car("포르쉐");
    Car yourCar = new Car("벤츠");
		
    myCar.run();
    yourCar.run();
  }
}

정적 멤버

정적 멤버 선언 -> 객체를 생성하지 않고 사용 가능

public class Calculator {
  String color;
  static double pi = 3.14159;
}

정적 멤버 사용 원칙 & 예외

클래스 이름으로 접근이 원칙

public class Calculator {
  static double pi = 3.14159;
  static int plus(int x, int y) {...}
  static int minus(int x, int y) {...}
}
double result1 = 10 * 10 * Calculator.pi;
int result2 = Calculator.plus(10,5);
int result3 = Calculator.minus(10,5);

가능은 하나 에러가 생길 수 있음

Calculator myCalcu = new Calculator();
double result1 = 10 * 10 * myCalcu.pi;
int result2 = myCalcu.plus(10,5);
int result3 = myCalcu.minus(10,5);

정적 메소드 작성시 유의할 점

인스턴스 필드나 인스턴스 메소드에 사용 X -> this 키워드도 사용 불가

원초적인 개념을 생각해보자

static void method3(){
  ClassName obj = new ClassName();
  obj.field1 = 10;
  obj.method1();
}

싱글톤 -> Private 접근 제한자

image

public class Singleton {
  private static Singleton singleton = new Singleton();
	
  private Singleton() {}
	
  static Singleton getInstance() {
    return singleton;
  }
}
public static void main(String[] args) {
  /*
  Singleton obj1 = new Singleton();  //컴파일 에러
  Singleton obj2 = new Singleton();  //컴파일 에러
  */
  
  Singleton obj1 = Singleton.getInstance();
  Singleton obj2 = Singleton.getInstance();
  
  if(obj1 == obj2) {
    System.out.println("같은 Singleton 객체 입니다.");
    } else {
      System.out.println("다른 Singleton 객체 입니다.");
        }
}

final 필드

화면으로 같이 확인하기

public class Person {
  final String nation = "Korea";
  final String ssn;
  String name;
		
  public Person(String ssn, String name) {
  this.ssn = ssn;
  this.name = name;
  }
	
}
public class PersonExample {
public static void main(String[] args) {
  Person p1 = new Person("123456-1234567", "홍길동");
		
  System.out.println(p1.nation);
  System.out.println(p1.ssn);
  System.out.println(p1.name);
		
  //p1.nation = "usa";
  //p1.ssn = "654321-7654321";
  p1.name = "홍삼원";
		
  System.out.println(p1.nation);
  System.out.println(p1.ssn);
  System.out.println(p1.name);
  
  }
}

상수

static final double EARTH_RADIUS = 6400;
static final double EARTH_AREA = 4 * Math.PI * EARTH_RADIUS * EARTH_RADIUS;