Java 12. 객체지향프로그래밍 3

업데이트:
2 분 소요

객체지향프로그래밍

1.생성자 (constructor)

1) 개요

  • class_name(argument) {}
    - 생성자는 반환값이 없고, 클래스 이름과 동일함
    - 근본적으로 메서드와 같음.
  • 객체를 생성할 때 new 키워드와 함께 사용 ( 예 : new Student() )
  • 객체를 생성하기 위해서 new와 함께 호출 됨.

역할

  • 객체가 생성될 때 변수나 상수를 초기화 하거나 다른 초기화 기능을 수행하는 메서드를 호출함
  • 인스턴스가 생성될 때마다, 호출되는 ‘인스턴스 초기화 메서드’ 역할을 함.
  • 대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private으로 선언하는 경우도 잇음.

2) 기본 생성자 (default constructor)

  • 클래스에는 반드시 적어도 하나 이상의 생성자가 존재
  • 클래스에 생성자를 구현하지 않아도 new 키워드와 함께 생성자를 호출할 수 있음.
  • 클래스에 생성자가 하나도 없는 경우 컴파일러 생성자 코드를 넣어 줌.
        - public Student(){} 
  • 매개 변수가 없음, 구현부가 없음
public class Car {

	String color;				// 색상
	String gearType;			// 변속기
	int door;					// 차문
	
	public Car() {
		this.color = "노랑";
		this.gearType = "수동";
		this.door = 4;
	}
	
	// 인스턴스 복제를 위한 생성자
	public Car(Car car) {
		this.color= car.color;
		this.gearType=car.gearType;
		this.door=car.door;
	}
}   

3) 생성자 만들기 (매개변수가 있는 생성자)

  • 컴파일러가 제공해 주는 기본 생성자외에 필요에 의해 생성자를 직접 구현할 수 있다.
  • 하나의 클래스에 여러 개의 생성자 사용할 수 있음(오버로딩 개념)
  • 클래스에 생성자를 따로 구현하면 기본 생성자(default constructor)는 제공되지 않음.
  • 생성자를 호출하는 코드에서 여러 생성자 중 필요에 따라 호출해서 사용할 수 있음.

2.this()

  • 생성자에서 다른 생성자 호출
  • 같은 클래스내에서 다른 생성자를 호출할 때 사용함.
  • 다른 생성자 호출은 생성장의 첫문자에서 사용해야 함.
  • this와 개념이 다름.
- 인스턴스 자신을 가르키는 참조변수
- 인스턴스의 주소가 저장되어 있다.
- 모든 클래스에 지역변수로 숨겨진 채로 존재함.
- new라는 연산자가 heap에 인스턴스를 할당할 때, 비로소 활성화가 이루어짐.
public class Car2 {

	String color;				// 색상
	String gearType;			// 변속기
	int door;					// 차문
	
	public Car2() {
		// 같은 클래스내에 있는 매개변수가 3개인 생성자를 호출
		this("검정", "수동", 5);
	}
	public Car2(String color,String gearType,int door) {
		this.color=color;
		this.door=door;
		this.gearType=gearType;
	}
	public Car2(Car2 car) {
		this.color=car.color;
		this.gearType=car.gearType;
		this.door=car.door;
	}
	@Override
	public String toString() {
		return this.color +", "
				+ this.gearType+", "
				+ this.door;
	}
	
	
}

3.변수의 자료형

기본 자료형

    - int, long, float, double 

참조 자료형

  • String, Studnet, Date 등
  • 클래스 형으로 변수를 선언
  • 기본 자료형은 사용하는 메모리 크기가 정해져 있지만, 참조 자료형은 클래스에 따라 다름.

4.참조 자료형 정의하여 사용하기 (예)

1) 학생이 수강한 과목들에 대한 성적을 산출한다.
   ----          ----
   Student      Subject
   Student                      Subject
    - 학번                     - 과목 이름
    - 이름과                   - 과목 점수
    - 국어과목
    - 수학과목
  • student
public class Student {
	
	int StudnetID;
	String studentName;
	
	Subject korea;
	Subject math;
	
	public Student(int id, String name) {			//생성자
		this.StudnetID=id;
		this.studentName=name;
		
		korea = new Subject();
		math = new Subject();
	
		
	}
	public void setKoreaSubject(String name,int score) {
		korea.subjectName = name;
		korea.score=score;
	}
	public void setMathSubject(String name,int score) {
		math.subjectName = name;
		math.score=score;
	}
	public void showStudentScore() {
		int total=korea.score+math.score;
		System.out.println(studentName+" 학생의 총점은"+ total +" 입니다.");
	}
	
}
  • subject
public class Subject {
	
	String subjectName;
	int score;
	int subjectID;
}
  • Test
public class StudentTest {

	public static void main(String[] args) {

		Student studentLee =new Student(2022, "이순신");
		studentLee.setKoreaSubject("국어", 100);
		studentLee.setMathSubject("수학", 90);
		
		Student studentShin = new Student(2021, "신사임당");
		studentShin.setKoreaSubject("국어", 99);
		studentShin.setMathSubject("수학", 98);
		
		studentLee.showStudentScore();
		studentShin.showStudentScore();
	}

}

댓글남기기