컴퓨터는 잘못이 없다..

[JAVA]자바의 접근 제어자, default생성자가 없으면 어떻게 될까 본문

공부/JAVA

[JAVA]자바의 접근 제어자, default생성자가 없으면 어떻게 될까

도토리까꿍v 2020. 12. 29. 15:08
Contents 접기

[핵심]

1. 자바의 접근 지정자에 대해 알아보자.

2. 클래스에 default생성자가 없으면 어떻게 될지 살펴보자.

 

[예제코드]

Car.java

package test.auto;

/*
접근지정자 4가지
1. public - 모두 공개
2. protected - in package or another package + child (같은 패키지라면 공개하겠다 or 다른 패키지더라도 상속관계이면 공개하겠다.)
3. defalut(접근지정자를 적지 않음) - in package
4. private - in object or in class

in object or in class의 의미 
private static String name -> 클래스 안에서만 공개
private String name -> 객체 안에서만 공개 
static 필드는 클래스에 만들어지는 필드
non static 필드는 객체 안에 만들어지는 필드

*class의 접근지정자는 public과 defalut만 쓰며, import 가능여부를 지정해준다. 보통은 public을 쓴다.*

*/


//class의 접근지정자는 import 가능여부를 정해준다.
public class Car {
	//protected 접근 지정자를 가진 필드
	protected Engine engine;
	
	//Engine type을 인자로 전달 받는 생성자
	public Car(Engine engine) {
		this.engine= engine;
	}
	
	//메소드
	public void drive() {
		if(this.engine==null) {
			System.out.println("Engine이 없어서 달릴수가 없어요!");
			return; //메소드 끝내기
		}
		System.out.println("달려요!");
	}
	

}

 

Engine.java

package test.auto;

public class Engine {

}

 

MainClass09.java

package test.main;

import test.auto.Car;
import test.auto.Engine;

public class MainClass09 {
	public static void main(String[] args) {
		//defalut 생성자가 없으므로 아래와 같은 방법으로는 객체 생성 불가.
		//Car car1 = new Car();
		Car car1 = new Car(new Engine());
		car1.drive();
		
	}

}

 

MainClass09.java 실행결과

달려요!

 

 

[예제코드 설명]

 

01. 자바의 접근 지정자

▼private, public, default, protected 접근가능유무를 그림으로 표현해보았다.  

▼Car.java에서 class에 접근지정자를 붙여주면 어떻게 될까?

 

 

02. 클래스에 기본(default) 생성자가 없으면 어떻게 될까?

 

▼Car.java의 매개변수가 있는 생성자만 있으면 어떻게 될까?

 

▼MainClass09.java 에서 Car car1=new Car();로는 객체 생성이 불가능하다. 

 

Comments