basicJAVA/5. Oop

201026 생성자

unemo 2020. 10. 26. 18:35
반응형

12. 생성자
  특이하게 이름이 클래스명과 같을 뿐인 메서드. 사용용도가 정해져있음. 변수중의 상수같은 놈. 인스턴스화를 진행할때만 호출할수있음
   - ***인스턴스가 생성될 때*** 호출되는 인스턴스 초기화 메서드이다.
   - 특징
     : 메서드처럼 클래스 내에 선언된다.
     : 리턴값이 없다. void를 써야하지만 모든 생성자가 리턴값이 없다. 이므로 void를 생략한다.
     : 생성자의 이름은 클래스명과 동일해야 한다.
   - 정의방법
     : 기본생성자
    클래스명(){
   
    }
    (컴파일러는 기본생성자만 만들어줌)
     : 매개변수가 있는 생성자
      클래스명(변수타입 병수명 ...){
     
      }
      (생성자도 메서드이기 때문에 오버로딩의 장점을 그대로 활용할 수 있다)
     
    - this.
     지역변수와 전역변수의 명칭이 동일할 때 전역변수를 가리키는 목적으로 사용
    - this();
     생성자 내에서 다른 생성자를 호출할 때 사용한다.
     생성자의 첫줄에만 사용될 수 있다.
    
    13. 변수의 초기화
     - int a= 10; <<명시적 초기화
      :변수의 선언과 동시에 초기화 한다.
     - 생성자를 이용한 초기화
      사실은 기본값정해져잇고 바꿔주는거지만 위에서 보면 생성과 동시에 초기화해주는것처럼 보인다.
     - 초기화블럭을 이용한 초기화
       : 클래스 초기화 블럭
       : 인스턴스 초기화 블럭
       굉장히많은 수식같은걸 거쳐야해서 생성자에 좀 넣기 그런것들...

 

package e_oop;

public class CarTest {

	public static void main(String[] args) {
		
		Car c = new Car();
		//얘는 기본생성자 호출한거임
		System.out.println(c.color);//기본값으로 출력됨
		//얘를 바꿔주려면
		c.color = "blue";
		c.gearType="auto";
		c.door=2;
		//이렇게 세줄로 할거를 한줄만에 한거임
		//즉 생성자는 인스턴스초기화용으로 사용할 수 있다.
		Car c2 = new Car("red","auto",4);
		//일단 new 하면 nullnull0으로 초기화되고, 그담에 저 괄호 red~가 초기화되서 바꿔주는거임
		
		Car c3 = new Car("violet");
		System.out.println(c3.color + c3.door + c3.gearType);
		//생성자는 new할때만 부를수있음.
		
	}
	
}

class Car{
	
	//Car()를 위에서 객체생성했지만 여기에는 생성자가 없음
	Car(String color, String gearType, int door){//메서드 오버로딩을 통해서 int형 받는 생성자를 만들어줌. 이제 생성자가 있음.. 없어서 만들어줬는데 있으니까 기본생성자Car(){}를 안만들어줌
		//즉 기본생성자 외에 다른 생성자쓰고싶으면 기본생성자도 만들고 그외도 만들어야함
		
		//받은거를 여기다 초기화
		this.color = color;
		this.gearType = gearType;
		this.door = door;
		
		//지역변수가 변수중 우선순위인데,
				/*ar(String color, String gearType, int door){
					
					color<<전역변수임을 아려줘야함 = color;<<지역변수
					gearType = gearType;
					door = door;
					
					그래서 this.color < 이 인스턴스에 있는 color를 의미한다.지역변수를 쫒아가는게 아님
					지역변수와 전역변수의 이름이 같을때 구분위해 this.을 쓴다. "이 잉ㄴ스턴스에 잇는!"이라는 뜻
				}*/
	}
	//눈에 안보이지만 컴파일러가 이렇게 만들어 준 것
	Car(){
		//기본!!!옵션을 검정,스틱,2문짝으로 만들고싶으면
		color = "black";
		gearType = "stick";
		door = 2; //이게 기본세팅이 된거임 기본생성자 안에 만들어줌으로써
		
		
	}//이렇게 해야 화 안냄
	
	
	//1단계 옵션은 색상만 바꿀 수 있다.
	Car(String color){
		this(); // this.와 다르다! this.은 전역과 지역변수이름같을때 구분용. this();는 생성자 내에서 다른 생성자 호출할때 사용
		//this라고 써져있지만 Car라고 써져잇는것임
		//this()는 해당 메서드 내의 첫줄에 와야함!!!
		this.color = color;
	}
	
	
	String color;
	String gearType;
	int door;
	
	
	
	
}
반응형

'basicJAVA > 5. Oop' 카테고리의 다른 글

201029 생성자  (0) 2020.10.29
201023 재귀호출, 매서드 오버로딩  (0) 2020.10.23
201023 매서드의 종류, 클래스멤버와 인스턴스 멤버간 참조호출  (0) 2020.10.23
InterVari  (0) 2020.10.23
201022 MyMathTest  (0) 2020.10.22