본문 바로가기

Java/Java 객체지향프로그래밍

정신 꽉붙잡아 this 생성자

728x90
반응형

정말.. 뭐에 홀린 인간처럼 공부를 게을리 하고 있는 인간

 

다시 정신 붙잡고 java 객체지향이라도 끝내야겠다 

휴...

 

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

	}

	
	
}

생성자에 대해서 알려면 생성자가 왜 필요한지 부터 이해를 해야한다. 

 

일단 저번에 써둔 print 코드에서 우리가 원하는것은 

생성자를 직접 지정해줘야만 코드가 돌아가지만 코드를 쓸때 이것을 까먹기가 쉽다. 

 

그렇다면 인스턴스를 생성할때 저 "----" 라는 구분자 값을 설정하지 않으면, class가 instance화 되지 못하도록 설정하는것이다. 

 

그러면 사용자가 실수할 가능성을 원천적으로 차단할 수 있게 된다. 

 

그걸 가능하게 하는것이 생성자(constructor)이다.

 

초기에 주입할 필요가 있는 값을 전달하거나 또는 초기의 작업을 수행할때 쓴다.

초기에 주입해야하는 값을 까먹어 버리면 나중에 코드에 문제가 생길 수 있기 때문에, 초기에 지정할 수 있게 하는게 좋은거다

 

예를들어, 

FileWriter f1 = new FileWriter("data.txt");
		f1.write("Hello");
		f1.write("Java");
		f1.close();

라는 코드는 FileWriter instance를 만들때, 꼭 "data.txt"라는 새로 생성할 파일명을 입력해줘야 한다. 

안그러면 코드에 문제가 생길 수 있음. 

 

 

'생성자'라는 method의 가장 메인 기능은 '초기화'이다. 

class와 똑같은 이름의 method를 정의하면 그게 바로 생성자이다. 

 

instance를 생성할때 class와 동일한 이름의 method가 있다면, 그 method를 호출하도록 약속되어 있다. 

그렇기 때문에 그 class가 instance화 될때 필요한 코드를 constructor (생성자) 안에 정의함으로써 초기화의 목적을 달성할 수 있다. 

 

 

말이 굉장히 어려워서 일단 받아 적었는데 대충이해 가는것 같기도 하다. 

 

 

일단 생성자를 사용한 코드는 이렇다. 

 

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 void B() {
		System.out.println(delimiter);
		System.out.println("B");
		System.out.println("B");		
	}
}

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

	}

	
	
}

Print Class 밑에 같은 이름으로 생성한 method가 바로 생성자이다. 

저기에다가 이제 instance에서 사용할 기능들을 설정해 주는 것이다. 

그래서 '초기화'의 기능을 갖는다고 말하는 것.

 

 

그리고 어떤 변수 앞에 this. 를 붙여주면 그것은 내가 생성한 그 instance를 가르키는 이름이다.

그러니까 여기서는 p1 instance를 가르키게 되는것이다. 

 

 

this.는 class가 instance화 되었을때 그 instance를 가르키는 특수한 용어? 기능이라고 일단 정리하고 넘어가야할 것 같다. 

 

좀 어렵다 ㅅㅂ

 

 

 

 

 

 

728x90
반응형

'Java > Java 객체지향프로그래밍' 카테고리의 다른 글

객체지향 프로그래밍 활용~  (0) 2020.11.27
망했다 static  (0) 2020.11.26
Instance  (0) 2020.11.26
클래스 more deeply  (0) 2020.11.25
클래스 존재 이유와 기본 형식  (0) 2020.11.25