(럭셔리 JAVA 프로그래밍) 4장 클래스와 객체

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 객체 배열