Today Study

20250124

TGnCo 2025. 1. 24. 17:54

 

Constructor ( 생성자 )
  • 객체가 클래스로 부터 생성될 때 기본적으로 가지고 있어야 할 값이나 실행되어야 될 코드를 정의하는 method의 일종.
  • 직접 호출되지 않습니다. ( new 에 의해서만 호출 )
  • 클래스의 이름과 동일하게 만들어지고 ( 대문자로 시작 ), 반환형이 없다.
  • this나 super를 사용하여 클래스 내에 다른 생성자를 호출할 수 있습니다.
  • Overload가 된다.
  • 개발자가 생성자를 하나도 정의하지 않으면 compiler가 매개변수 없는 기본생성자( default constructor )를 생성해준다. 개발자가 생성자를 하나라도 정의하면 compiler
  • 는 기본생성자를 생성하지 않는다.
문법)
	접근지정자 클래스명( 매개변수... ) {
		// 객체가 생성될 때 기본적으로 가지고 있어야 할 값
		// 객체가 생성될 때 실행되어야 할 코드를 정의.
	}
	
접근지정자)
	public : 클래스 외부에서 객체 생성 가능.
	protected : 같은 패키지의 다른 클래스에서 객체 생성 가능.
							패키지가 다른 경우에는 자식클래스에서 생성 가능.
	default : 같은 패키지의 다른 클래스에서 객체 생성가능.
						패키지가 다르면 객체 생성불가
	private : 클래스 안에서만 객체 생성가능.
						(singleton pattern을 적용하여 클래스를 생성)
		

 

 

default constructor

  • 매개변수가 없고 클래스의 접근지정자와 동일한 접근지정자를 가진 생성자.
class Test { // 패키지 안에서만 쓸 수 있다고 해서 [패키지 접근지정자]

}

// 위 class Test를 컴파일 하면
class Test {
	Test() {
		// 생성자
	}
}

public class Test {

}

// 위 public class Test를 컴파일 하면
public class Test {
	public Test {
		// 생성자 접근지정자 public.	
	}
}

 

JVM Memory
  • method 영역 : 실행되는 코드가 적재, static 변수가 저장, 가장먼저 실행
  • stack 영역 : 지역변수가 저장
  • heap 영역 : instance 변수가 저장, new 로만 사용가능 ( instance, 객체 )
class Test {
	static int i; // static 변수 - method 영역
	int j; // instance 변수 - heap 영역
	
	public static void main(String[] args) {
		int k = 0; // local 변수 - stack 영역
		Test t = new Test();
		Test t2 = new Test();
	}//main
}//class

값 복사 ( Call by Value )

  • method의 매개변수로 기본형이 선언되어 있으면, 값은 복사되어 전달됩니다.
public class Test{
	public void swap(int i, int j) {
		int temp = 0;
		temp = i;
		i = j;
		j = temp;
		System.out.println("swap method 안 i : " + i + ", j : " + j);
	}// swap
	
	public static void main(String[] args) {
		// 객체화
		Test t = new Test();
		int i = 2025;
		int j = 1;
		System.out.println("swap methoe 호출 전 i : " + i + ", j : " + j);
		t.swap(i,j);
		System.out.println("swap methoe 호출 후 i : " + i + ", j : " + j);
		
	}// main
}// class

 

주소전달 ( Call By Referance )

  • 주소는 유일
  • method의 매개변수가 참조형을 가진다면 ( 참조형 String class array ), 주소가 그대로 전달됨.(유일 : 어떤 method안에서 객체를 사용하더라도 해당 객체의 주소는 유일하기 때문에 해당객체를 변경시킨다.)

 

this

  • keyword 형식, method 형식으로 사용할 수 있다.
    • keyword 형식
      • method를 호출하는 instance(객체) 의 주소로 변경된다.
      • t.setI() = 이와 같이 method를 호출하면 t 의 주소를 this가 불러온다.
      • 객체가 생성된 후 호출되는 instance 영역에서만 사용할 수 있다.( 객체를 사용하지 않고 클래스명.method() 명으로 호출되는 static 영역에서는 사용할 수 없다. )
      • instance 변수명과 parameter 명이 같을 때, 두 변수를 식별하기 위해서 사용.( this.변수명 ⇒ heap에 생성되는 instance 변수명 ) 
        사용법 )
        - 변수
        	this.변수명 = 값 // heap 에 instance 변수 저장
        	
        - method 호출
        	this.method명() // 자식클래스
        class Test {
        	int i;
        	
        	public void setI(int i) {
        		this.i = i;	
        	}
        	
        	public static void main(String[] args) {
        		Test t = new Test(); // heap에 생성하고 heap에 주소를 stack에 할당
        		
        		t.setI(100);// t - (heap 주소) 10번지를 사용하여 setI method 호출 해줘!
        		
        		Test t2 = new Test();
        		t2.setI(20);// 
        	}
        }
      • ( 변수명 ⇒ stack에 생성되는 local 변수명 )

 

 

 

'Today Study' 카테고리의 다른 글

20250123  (1) 2025.01.23
20250122  (0) 2025.01.22
20250121  (0) 2025.01.21
20250120  (0) 2025.01.20
20250117  (0) 2025.01.17