본문 바로가기

국비교육/국비교육

day10 - 0804

생성자 (constructor)

생성자는 인스턴스가 생성될 때 호출되는 인스턴트 초기화 메서드이다.

인스턴스의 변수 초기화 또는 인스턴스 생성시 실행되어야 하는 작업을 위해서 사용된다

클래스명 (타입변수1, 타입변수2, ...) {
	// 인스턴스 생성시 초기화할 변수 또는 인스턴스 생성시 수행될 코드
}

- 생성자의 이름은 클래스 이름과 같아야 한다

- 생성자는 리턴값이 없다 (void같은 반환형을 적을 수 없음)

 

1) 기본 생성자

- Java에서 생성자를 입력하지 않을 경우 기본 생성자가 자동으로 제공된다

클래스명() {};

 

2) 매개변수가 있는 생성자

- 필드값을 매개하는 매개변수가 있는 생성자는 매개변수에 해당하는 값을 입력하지 않으면 객체를 생성할 수 없다

클래스명(매개변수1, 매개변수2, ...) {
매개변수1 = 초기화할 변수1
매개변수2 = 초기화할 변수2
...
};

 

** 생성자 오버로딩

- 매개변수 중 일부만 값을 입력해도 인스턴스를 생성할 수 있도록 만들 수 있다

- 입력되지 않은 매개변수의 필드값을 자동으로 설정할 수 있다 (캐릭터명만 입력하면 자동으로 레벨은 1이 되도록)

class Player {

	// 멤버 필드
	String id;
	String lv;

	// 생성자 오버로딩 - 레벨이 입력되지 않으면 자동으로 1이 되도록
	Player(String id) {
		this.name = name;
		this.lv = 1;
	}

	// 생성자 - 레벨을 설정할 수 있도록
	Player(String id, int lv) {
		this.name = name;
		this.lv = lv;
	}
}

 

 

day10_oop.constructor1 : 생성자 (constructor)

day10_oop.constructor2 : 생성자 예제

 

 

getter / setter 메소드

getter와 setter를 사용하는 이유

- Java는 클래스에 직접 접근하여 데이터를 변경하는 것을 선호하지 않는다 (멤버 필드의 직접 접근을 제한)

- 오직 클래스 외부에서 메소드를 통해 데이터를 변경하도록 한다

 

getter 메소드

- 클래스의 멤버 필드의 값과 동일한 값을 반환하는 메소드

- 멤버 필드에 직접 접근하지 않고도 멤버 필드의 값을 이용할 수 있다 (객체의 원본 데이터를 손상시키지 않는다)

- getter 메소드를 이용하여 멤버 필드의 값을 반환한 후 멤버 필드에 없는 값을 getter로 정의할 수 있다

   ex) 학생 A의 국어, 영어, 수학 성적을 반환한 후 반환한 값으로 총점과 평균을 새로 정의할 수 있다

접근제한 반환형 메소드명() {
	return this.멤버필드명
}

- 접근제한자 : public / (default) / package / private

- 반환형 : 반환하려는 값의 자료형, void는 반환형 없음을 의미한다

- 메소드명 : 관례상 get + 멤버필드 이름으로 약속하며 멤버필드 이름의 첫 글자는 대문자로 한다

   ex) getName()

 

 

day10_oop.getter1 : getter 메소드

day10_oop.getter2 : getter 메소드 예제

 

 

setter 메소드

- 메소드의 매개변수 값을 검증하여 유효한 값만 데이터로 저장하도록 한다

- 객체 생성시 멤버 필드에 저장되는 데이터에 특별한 조건을 부여할 때 사용한다

   ex) 속도는 0 이상이므로 객체 생성시 속도 필드에 0보다 작은 값을 입력하면 저장되지 않도록 할 수 있다

접근제한 void 메소드명(매개변수) {
	// 내용
]

 

 

day10_oop.setter1 : setter 메소드

day10_oop.setter2 : setter 메소드 예제

 

 

getter / setter의 반환형

getter 메소드는 실제로 어떤 값을 반환하기 때문에 메소드명 앞에 반환형(int, float, String 등)을 써야한다

setter 메소드는 값을 반환하지 않고 단순히 멤버 필드에 입력되는 값의 조건을 부여하므로 반환형이 없는 void를 쓴다

 

 

getter / setter 메소드의 사용 예시

- 국어점수(korean)와 수학점수(math)를 이용하여 총점(sum)과 평균(avg)을 구한다

public class Score {

	// 멤버 필드
	private int korean;
	private int math;

	// korean에 대한 getter & setter 메소드
	public int getKorean() {
		this.name = korean;
	}

	public void setKorean(int korean) {
		if(korean < 0) {	// 만약 국어 점수가 0보다 작으면
			return;		// 구문 종료
		}
	this.korean = korean;		// 그렇지 않다면 korean 필드의 값을 반환
	}

	// math에 대한 getter & setter 메소드
	public int getMath() {
		this.Math = math
	}

	public void setMath(int math) {
		if(math < 0) {		// 만약 수학 점수가 0보다 작으면
			return;		// 구문 종류
		}
		this.Maath = math;	// 그렇지 않다면 math 필드의 값을 반환
	}
    
	// 총점(sum)에 대한 getter 메소드
	public int getSum() {
		return this.korean + this.math;
	}

	// 평균(avg)에 대한 getter 메소드
	public float getAvg() {
		return this.getSum() / 3;
	}
}

 

접근자 (modifier)

접근제한자의 종류와 접근 가능 범위

 

  같은 클래스 같은 패키지 자손 클래스 전체
public O O O O
protected O O O  
(default) O O    
private O      

- 객체 지향에서는 클래스 외부에서 멤버 필드의 접근을 제한하기 위해 멤버 필드에 private를 적용한다

 

 

day10_oop.modifier1 : 접근제어자 (Modifier)

day10_oop.modifier2 : 접근제어자 예제 (2)

day10_oop.modifier3 : public과 package의 차이

day10_oop.modifier4 : 접근제어자 예제 (4)

 

'국비교육 > 국비교육' 카테고리의 다른 글

day12 - 0808  (0) 2022.08.09
day11 - 0805  (0) 2022.08.09
day9 - 0803  (0) 2022.08.04
day8 - 0802  (0) 2022.08.04
day7 - 0801  (0) 2022.08.04