4.2 클래스 만들기
수업 구성
클래스의 구성 요소: 멤버
구성원 = 필드(구성원 변수) + 메서드(구성원 함수)
예제 4-2
너비와 높이를 입력으로 받아 사각형의 합을 출력하는 프로그램을 작성하세요.
public class Rectangle {
int width;
int heigth;
public int Rectarea(){
return width*heigth;
}
}
import java.util.*;
public class example {
public static void main(String() args) {
Scanner scan = new Scanner(System.in);
Rectangle rect = new Rectangle(); // 객체 생성
// 가로 세로 값 입력받기
System.out.print("넓이는? : ");
rect.width = scan.nextInt();
System.out.print("높이는? : ");
rect.heigth = scan.nextInt();
System.out.print("사각형의 넓이는 " + rect.Rectarea());
scan.close();
}
}
4.3 생성자
생성자 선언 및 사용법
생성자: 개체가 생성될 때 개체를 초기화하기 위해 실행되는 메서드입니다.
생성자는 객체가 생성될 때 자동으로 호출되는 메서드입니다.
→ 개체에 필요한 초기화를 수행하는 코드가 필요합니다.
예제 4-3
두 개의 생성자로 Circle 클래스를 실행한 결과는 무엇입니까?
public class Circle {
public int radius;
public String name;
public Circle() { // 매개 변수가 없는 생성자
radius = 1; // 매개 변수로 필드 초기화
name = "";
}
public Circle(int r, String n){
radius = r;
name = n;
}
public double getArea() {
return 3.14 * radius * radius;
}
}
//import java.util.*;
public class example {
public static void main(String() args) {
Circle pizza = new Circle(10,"피자");
double getPiArea = pizza.getArea();
System.out.println(pizza.name + "의 면적은 : " + getPiArea);
Circle dounut = new Circle(5, "도넛");
double getDoArea = dounut.getArea();
System.out.println(dounut.name + "의 면적은 : " + getDoArea);
}
}
피자 면적: 314.0
도넛의 면적은 78.5입니다.
- 생성자 이름은 클래스 이름과 일치해야 합니다.
- 여러 생성자를 작성할 수 있습니다(오버로드).
- 생성자는 new로 객체를 생성할 때 객체당 한 번만 호출됩니다.
- 생성자는 반환 유형을 지정할 수 없습니다.
>> 공개 서클 { … } - 생성자의 목적은 객체를 생성할 때 필요한 초기 작업을 수행하는 것입니다.
객체가 생성되면 생성자는
1. 필드 초기화
2. 필요한 스토리지 확보
3. 파일 열기
4. 네트워크 연결
개체가 활성화되기 전에 초기 준비를 하는 데 사용됩니다.
기본 생성자
기본 생성자: 매개 변수와 실행 가능한 코드가 없기 때문에 아무것도 하지 않고 단순히 반환하는 생성자입니다.
= 기본 생성자
생성자가 없으면 컴파일러에서 자동으로 기본 생성자를 생성합니다.
클래스에 하나 이상의 생성자가 있는 경우 컴파일러는 기본 생성자를 자동으로 생성하지 않습니다.
이 참조
그만큼 : 객체 자체에 대한 참조
현재 실행 중인 메서드가 속한 개체에 대한 참조
그것의 필요성
클래스에 있는 변수 이름과 개체에 있는 변수 이름을 복제할 때 구분하기 위해 필요합니다.
이것을 사용하려면 객체가 존재해야 합니다.
this()를 사용하여 다른 생성자 호출
this()는 하나의 생성자가 클래스 내에서 다른 생성자를 호출할 때 사용되는 Java 코드입니다.
예제 4-5
public class Book {
String title;
String author;
void show(){
System.out.println(title + " " + author);
}
public Book(){
this("",""); // 현재 정의하고 있는 Book 클래스의 갯수와 맞는 것 호출
System.out.println("생성자 호출됨");
}
public Book(String title){
this(title, "작자미상");
}
public Book(String title, String author){
this.title = title;
this.author = author;
}
}
//import java.util.*;
public class example {
public static void main(String() args) {
Book littlePrince = new Book("어린왕자", "생택쥐페리");
Book loveStory = new Book("춘향전");
Book empty = new Book();
loveStory.show();
}
}
사용시 주의사항
- this()는 생성자 코드에서만 호출할 수 있습니다.
- this()는 같은 클래스에서 다른 생성자를 호출할 때 사용해야 합니다.
- this()는 생성자의 첫 번째 문이어야 합니다.
개체를 교체할 때 고려해야 할 사항
객체를 = 연산자로 바꿀 때
개체 교체는 개체를 복제하는 것이 아니라 참조를 복제하는 것입니다.
import javax.swing.*;
public class Circle {
public int radius;
public Circle(int radius){
this.radius = radius;
}
public void set(int radius){
this.radius = radius;
}
}
//import java.util.*;
public class example {
public static void main(String() args) {
Circle ob1 = new Circle(1);
Circle ob2 = new Circle(2);
Circle s;
s = ob2; // 레퍼런스 복사(주소 넘김)
ob1 = ob2; // 객체 치환
System.out.println("ob1.radius = " + ob1.radius);
System.out.println("ob2.radius = " + ob2.radius);
}
}
ob1, ob2, s: 주소를 기억하기에 충분한 주소가 할당된 참조 변수를 만듭니다.
4.4 객체 배열