Dev-Kyuu
article thumbnail
Chapter 6-5 인스턴스멤버와 정적 멤버

 

1.1 This와 This()의 차이

This 참조변수

: this는 인스턴스가 자기 자신을 참조하는데 사용하는 변수로, 자신의 객체에 접근할 때 사용된다

: 이러한 this 참조변수는 해당 인스턴스의 주소를 가지고 있다.

: 주로 멤버변수와 매개변수의 이름이 동일할때 이를 구분짓기 위해 사용함

 

 

🔎 기본형과 참조형

(1) 기본형 : 변수가 값 자체를 보관함 

(2) 참조형 : 변수가 값 자체를 보관하는게 아니라 변수가 저장된 영역을 가르킨다.

 

 

This() 생성자

: This()는 같은 클래스에서 생성자가 다른 생성자를 호출할 때 사용된다

: this() 메소드에 인수를 전달하면, 생성자 중에서 메소드 시그니처가 일치하는 다른 생성자를 찾아 호출해준다.

: 주로 코드의 중복을 줄일 목적으로 사용되며, this()는 생성자 코드에서만 사용할 수 있다.

*) 주의할점 : 생성자 코드 안에서 사용될 때 첫번째 문장으로 다른 코드보다 가장 윗줄에 위치해야한다.

 

class Car{
	String color; // 인스턴스 변수
    String gearType;
    int door; 
    
    Car(){
        this("white", "auto", 4); // Car(String color, string gearType, int door)를 호출
    }
    
    Car(String color){
        this(color, "auto", 4); // Car(String color, string gearType, int door)를 호출
    }
    
    Car(String color, String gearType, int door){
        this.color = color; 
        this.gearType = gearType;
        this.door = door;
    }
}

 

1.2 Static과 싱글톤

Static 변수 

: 여러 인스턴스가 하나의 값을 공유할때 사용

: Static으로 선언한 변수는 인스턴스가 생성될 때 마다 새로 생성되는 변수가 아니며, 프로그램이 실행되어 메모리에 

  적재되었을 때 한번 메모리에 공간이 할당되어 모든 인스턴스가 공유한다.

 

Singleton 패턴

: static을 응용하여 프로그램 전반에서 사용하는 인스턴스를 하나만 구현하는 방식

public class Company {
	private static Company instance = new Company(); //2. 생성자가 Private이므로 외부에서 인스턴스를 생성할 수 없기때문에 내부에 유일한 인스턴스를 생성한다.
 	private Company() {} //1. 생성자를 private 형식으로 만든다
    
    	public static Company getInstance() {	// 3. 유일한 인스턴스를 외부에서 사용할 수 있게 하기 위해서 Public으로 메서드를 선언한다.
    	if (instance == null) {					// 해당 메서드는 static으로 선언해야하는데, 외부에서 getInstance()메서드를 호출할 때 생성과 관계없이 호출되어야 하기 때문 
    		instance = new Company();
   		 }
    	return instance;
    	}
  }
  
  
  
  # 외부 클래스
  Company myCompany = Company.getInstance(); // 생성된 인스턴스를 가져와 사용한다.

 

1.3 Final 키워드 

: final 키워드는 상황에 맞게 더 이상의 상속이나, 오버라이딩을 금지하고자 할 때 사용함.

 

  • Final 필드 : Final 키워드를 필드에 사용하면 그 필드는 더이상 수정이 불가능 함
  • Final 클래스 : Final 키워드를 클래스에 사용하면 그 클래스는 더이상 상속이 불가능함
  • Final 메소드 : Final 키워드를 메소드에 사용하면 그 메소드는 더이상 오버라이딩이 불가능함 
profile

Dev-Kyuu

@kyuu_ng

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!