Java/java

4주차 - 생성자 constructor (1)

우젼 2022. 9. 2. 21:16

생성자는 인스턴스를 만들때 필요하다.

일반적으로 생성자는 public 클래스이름(변수) { 실행 내용} 으로 만들어진다.

기본 생성자를 만들지 않았을 경우, 기본 생성자는 자동으로 생성된것으로 간주된다.

하지만 다른 생성자를 만들경우, 기본 생성자를 반드시 만들어 주어야만 한다.

아래는 생성자를 만드는 예시이다.

public class EvenOdd {
	private int data; 	// 멤버변수는 초기화를 별도로 하지 않아도 초기화가 자동으로 됨
					 	// 지역변수는 초기화 해줘야함!
	
    // 기본 생성자
	public EvenOdd() {
	}
    
    // 매개변수를 받는 생성자
	public EvenOdd(int data) {
		this.data = data; // 입력받은 매개변수의 값을 멤버변수에 저장해주는 부분
	}
    
    // 아래는 메서드의 생성
    	public boolean result() { // 이전에 입력받은 멤버변수 data를 이용하여 boolean값을 리턴하는 메서드
		if(data%2==0) {
			return true;
		} else {
			return false;
		}
	}
	public void setData(int data) {
		this.data = data;
	}
	}
}

필요에 따라서는 생성자를 만드는 것과 비슷한 방법으로 클래스 안에 메서드를 생성할 수도 있다.

일반적으로 이런 경우에는 public 메서드이름 (매개변수) { 실행 내용 } 으로 작성된다.

public 은 상황에 따라 private, protected 를 이용한다. 자세한 설명은 추후에 다루겠다.

 

아래는 위의 클래스를 사용하는 예시

	public static void main(String[] args) {
    	// 기본 생성자의 생성
		EvenOdd eo = new EvenOdd();

		eo.setData(10);
		if (eo.result()) {
			System.out.println(eo.getData() + "은/는 짝수 입니다.");
		} else {
			System.out.println(eo.getData() + "은/는 홀수 입니다.");
		}

		// 매개변수를 받는 생성자의 사용
		EvenOdd eo2 = new EvenOdd(11);
		if (eo2.result()) {
			System.out.println(eo2.getData() + "은/는 짝수 입니다.");
		} else {
			System.out.println(eo2.getData() + "은/는 홀수 입니다.");
		}
	}

 

했갈린다면 코드를 가져가서 직접 써보는 편이 이해가 더 빠를 것이다.


아래는 두개 이상의 클래스의 생성자를 사용하는 예제이다.

메인 클래스에서 사용될 첫번째 클래스

public class Permanent {
	private int salary;
	private String name;

	// 기본 생성자
	public Permanent() {
	}

	// String, int 형인 두개의 매개변수를 받는 생성자
	public Permanent(String name, int salary) {
		this.name = name;
		this.salary = salary;

	}

	// 아래는 메소드의 생성
	public int getSalary() {
		return salary;
	}

	private void setSalary(int salary) {
		this.salary = salary;
	}

	public String getName() {
		return name;
	}

	private void setName(String name) {
		this.name = name;
	}
}

아래는 메인클래스에서 사용될 두번째 클래스

public class PartTime {
	private String name;
	private int pay;
	private int time;
	
	// alt + shift +s ->> Generate Constructor using field 선택시 생성자도 자동 생성이 가능!
	// 우클릭 ->> source ->> Generate Constructor using field
	public PartTime() {
	}

	public PartTime(String name, int time, int salary) {
		super(); 
		// super : 부모 인스턴스의 참고 값을 담고 있는 예약어
		// super() : 부모 생성자 호출.
		this.name = name;
		this.time = time;
		this.pay = salary * time;

	}

	public int getTime() {
		return time;
	}

	private void setTime(int time) {
		this.time = time;
	}

	public String getName() {
		return name;
	}

	private void setName(String name) {
		this.name = name;
	}

	public int getSalary() {
		return pay;
	}

	private void setSalary(int salary) {
		this.pay = salary;
	}

}

 

 

아래는 위의 두 클래스를 이용하여 급여를 확인해보는 예제

public static void main(String[] args) {

		Permanent permanent1 = new Permanent("김변수", 3000000);
		Permanent permanent2 = new Permanent("이상수", 4000000);
		Permanent permanent3 = new Permanent("박참조", 5000000);

		System.out.println("이름 : " + permanent1.getName());
		System.out.println("급여 : " + permanent1.getSalary() + "원");

		System.out.println("이름 : " + permanent2.getName());
		System.out.println("급여 : " + permanent3.getSalary() + "원");

		System.out.println("이름 : " + permanent3.getName());
		System.out.println("급여 : " + permanent3.getSalary() + "원");

		// 3명의 이름, 시급, 시간 입력
		// 3명의 이름 급여 출력

		PartTime partTime1 = new PartTime("김파트", 160, 9500);
		PartTime partTime2 = new PartTime("이파트", 160, 10000);
		PartTime partTime3 = new PartTime("빅파트", 160, 15000);

		System.out.println("이름 : " + partTime1.getName());
		System.out.println("급여 : " + partTime1.getSalary() + "원");

		System.out.println("이름 : " + partTime2.getName());
		System.out.println("급여 : " + partTime2.getSalary() + "원");

		System.out.println("이름 : " + partTime3.getName());
		System.out.println("급여 : " + partTime3.getSalary() + "원");
	}

 

 

*알면 좋은 소소한 단축키

          alt + shift +s ->> Generate Constructor using field 선택시 멤버변수의 setter,getter가 자동 생성 된다.
          만약 마우스 이용이 편하다면 아래의 방법을 이용해보자

          우클릭 ->> source ->> Generate Constructor using field