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