본문 바로가기

개발/잡다한것

생성자와 this의 의미

만약 아래와 같은 두코드가있다

class Print{
	public String delimiter="";
	
	public void A() {
		System.out.println(delimiter);
		System.out.println("A");
		System.out.println("A");
	}
}
public class MyOOP{
	
	public static void main(String[] args) {
		
		Print p1 = new Print();
		p1.delimiter="----";
		p1.A();
		
	}
}

이 코드는 p1이라는 인스턴스의 delimiter의 변수를 변경하여 A()함수를 실행시켰다

근데 만약 delimiter변수를 설정하는것을 깜빡하면 오류가날것이다 

이것을 방지하기 위해 생성자라는 개념이있다 

 

생성자는 클래스명과 똑같은이름으로 함수를 선언해준다

class Print{
	public String delimiter="";
	public Print(String _delimiter) {
		delimiter=_delimiter;
	}
	public void A() {
		System.out.println(delimiter);
		System.out.println("A");
		System.out.println("A");
	}
}

 

그리고 인스턴스를 생성할때 매개변수를 넣으면 생성자를 사용할수있다

public class MyOOP{
	
	public static void main(String[] args) {
		
		Print p1 = new Print("----");
		p1.A();
		
		
	}
}

 

그런데 _delimiter로 사용하지말고 그냥 delimiter로 사용하면 더좋지 않을까 라는생각을할수있다

만약 언더바없이 그대로 사용하면 인스턴스의 변수인 delimiter가 변경되지않고 생성자의 매개변수인 delimiter가 변경되어

A함수가 실행될때 delimiter는 빈칸이 출력된다

그것을 방지하지위해 this라는 것을 만들었다 this 를사용하면 생성자의 매개변수가 변하는것이아닌 인스턴스의 변수가 변경되어 생성자의 역할을 할수있게해주고 코드를 보기좋게만들어준다

class Print{
	public String delimiter="";
	public Print(String _delimiter) {
		this.delimiter=delimiter;
	}
	public void A() {
		System.out.println(this.delimiter);
		System.out.println("A");
		System.out.println("A");
	}
}

 

'개발 > 잡다한것' 카테고리의 다른 글

spring 비지니스 로직이란?  (0) 2024.06.06
스프링 bean이란? -(스프링컨테이너)  (0) 2024.06.03
JSTL태그 정리  (0) 2024.05.29
JSTL이란?  (0) 2024.05.29
JSP란?-(서블릿)  (0) 2024.05.29