back-end&DB/Java

JAVA 생성자와 접근제한자

Hoon0211 2023. 5. 19. 14:36
728x90

1.생성자

 

1.1 생성자의 특징

- 생성자는 하나 이상 선언되어야 함

- 생성자 이름은 클래스 이름과 동일

- 생성자는 리턴 타입을 지정 할 수 없다.

- 생성자는 new를 통해 객체를 생성할 때만 호출됨

- 생성자는 메소드다

 

개발자는 생성자를 정의하지 않으면 자동으로 기본 생성자가 정의됨

컴파일러에 의해 자동 생성

기본 생성자를 디폴트 생성자(default constructor)라고도 함

만약 default 생성자만 존재하고 default에 아무런 기능이 없을 경우 생략이 가능함

 

 

public class Student { // 클래스의 이름과 동일

	String name;
	String number;
	int age;
    
public Student(String name, String number, int age) { // 클래스의 이름과 동일
		
		this.name = name;          	//리턴 타입은 없다.
		this.number = number; 		//리턴 타입은 없다.
		this.int = age;			//리턴 타입은 없다.
	}
    // default 생략이 가능하다.
aaa.name = "에이군";
aaa numner = "20230001";
aaa age = 20;

Student aaa = new Student("에이군","20230001",20,);

 

 

2. 생성자 종류

 

- public

모든 클래스 파일에서 사용이 가능하다.

 

-protected

같은 클래스 같은 패키지에서 불러오는것이 가능하다.

 

- default 

같은 클래스 같은 패키지에서 불러오는 것이 가능하다.

default 는 클래스에서 접근 제한자 생략이 가능하다. 

String default_string;
	
	void method_test() {	
	}

 

- pruvate

본인 클래스 파일에서만 접근이 가능

private int hp;
private int attack;
private int defense;
private int speed;
private String type;

 

제어자 같은 클래스 같은 패키지 자손 클래스 전체
public
protected  
default    
private      

 

 

- this

생성자의 이름으로 클래스이름 대신 this를 사용

한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능

public Pokemon(int hp, int attack, int defense, int speed, String type) {
		this.hp = hp;
		this.attack = attack;
		this.defense = defense;
		this.speed = speed;
		this.type = type;
	}

 

 

3. 캡슐화(Encapsulation)

외부에서 공개된 메소드를 통해 접근이 가능

 

	public int getHp() {
		return hp;
	}
	
	public void setHp(int hp) {
		this.hp = hp;
	}

 

 

4. 생성자 예제

- Calculator 클래스를 작성하세요

Calculator클래스의 필드
접근지정자 타입 변수명 설명
private int num1 첫 번째 정수
private int num2 두 번째 정수
Calculator클래스의 메소드
이름 리턴타입 매개변수 설명
calculator X int 변수이름, 
int 변수이름
2개의 매개변수를 가진
생성자로 num1, num2
sum int - num1 과 num2를 더한 값
sub int - num1 과 num2를 뺀 값
mul int - num1 과 num2를 곱한 값
div double - num1 과 num2를 나눈 값
public class Calculator {

	private int num1;
	private int num2;

	public Calculator(int num1, int num2) {
		this.num1 = num1;
		this.num2 = num2;
	}
	public int sum() {
		return num1 + num2;
	}
	public int sub() {
		return num1 - num2;
	}
	public int mul() {
		return num1 * num2;
	}
	public double div() {
		return (double)num1/num2;
	}
}
public class Calculator_main {

	public static void main(String[] args) {
		
		Calculator cal = new Calculator(75, 5);

		int sum_result = cal.sum();
		System.out.println(sum_result);
		...
	}

 

 

5. 메소드 오버로딩

 

메소드 이름이 같아야 한다.

매겨변수의 개수 또는 타입이 달라야 한다.

 

- 오버로딩의 장점

메소드의 이름 낭비 방지

같은 메소드에 여러종류의 매개변수를 받을 수 있음

public class Calculator {

	private int num1;
	private int num2;

	public Calculator(int num1, int num2) {
		this.num1 = num1;
		this.num2 = num2;
	}

	public Calculator(int num1) { //  << 오버로딩
		this.num1 = num1;
	}
    
    	public int square() {
		return num1 * num1;
	}
Calculator cal = new Calculator(75, 5);
	int sum_result = cal.sum();
	System.out.println(sum_result);
	System.out.println(cal.sub());
       
Calculator cal2 = new Calculator(12);
	System.out.println(cal2.square());
728x90