정말.. 뭐에 홀린 인간처럼 공부를 게을리 하고 있는 인간
다시 정신 붙잡고 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를 가르키는 특수한 용어? 기능이라고 일단 정리하고 넘어가야할 것 같다.
좀 어렵다 ㅅㅂ
'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 |