과거⚰️

생성자이론 || 오버로딩 1, 2 || 캡슐화1, 2 || 래퍼클래스

아무루 2020. 12. 14. 14:18
 package day055;

/*
 * # 생성자(constructor)
 * 1. 생성자는 반드시 클래스 이름과 같아야 한다.
 * 2. 생성자는 new 클래스명(); 이때 호출된다.
 * 3. 생성자는 인스턴스 변수를 초기화 시킬 목적으로 사용한다.
 * 4. 생성자를 정의하지 않으면, 자바 컴파일러가 자동으로 기본 생성자를 만든다.
 * 5. 기본생성자란, 매개변수에 아무것도 없는 생성자를 의미한다.
 * 6. 생성자를 정의하면 기본 생성자는 자동으로 만들어지지 않는다.
 * 7. 생성자는 리턴타입을 가지지 않고 return도 사용하지 않는다.(메서드와의 차이점)
 */

class Ex01 {
    int a;	// 인스턴스 변수
    int b;
    int c;

    Ex01() {
        a = 10;
        b = 20;
        c = 30;
        System.out.println("생성자 호출");
    }
}

public class Day05501생성자이론 {
    public static void main(String[] args) {

        //           이때 기본 생성자가 실행된다.
        Ex01 e = new Ex01();
        // 생성자는 기본 값을 저장하고 싶을 때 사용한다.(특별히 필요하지는 않다.)

    }

}


package day055;

/*
 * # 생성자 오버로딩
 * 1. 생성자도 메서드이기 때문에 같은 이름으로 여러개 만들 수 있다.
 * 2. 단, 메서드와 마찬가지로 매개변수(parameter)를 서로 다르게 해야한다.
 */

class Product {
    String name;
    int price;

    Product() {
        name = "박스";
        price = 1000;
        System.out.println("기본 생성자");
    }

    Product(String name, int price){
        this.name = name;
        this.price = price;
    }

    void printProduct() {
        System.out.println(name + " : " + price);
    }
}

public class Day05502생성자오버로딩1 {
    public static void main(String[] args) {

        //               기본 생성자 호출
        Product p1 = new Product();
        p1.printProduct();

        //               생성자 오버로딩
        Product p2 = new Product("빈박스", 2000);
        p2.printProduct();

    }
}



package day055;

class Fruit {
    String name;
    int price;

    // 기본 생성자
    Fruit(){}

    // 생성자 오버로딩(overloading)
    Fruit(String name, int price){
        this.name = name;
        this.price = price;
    }

    void setData(String name, int price) {
        this.name = name;
        this.price = price;
    }

    void printData() {
        System.out.println(name + "(" + price + "원)");
    }
}

public class Day05503생성자오버로딩2 {
    public static void main(String[] args) {

        // # 인스턴스 변수 초기화방법 3가지
        Fruit apple = new Fruit();
        // # 방법1) .으로 접근해 초기화
        apple.name = "사과";
        apple.price = 1000;
        apple.printData();

        Fruit banana = new Fruit();
        // # 방법2) 메서드를 만들어 초기화
        banana.setData("바나나", 2000);
        banana.printData();

        // # 방법3) 생성자를 활용해 초기화
        Fruit melon = new Fruit("멜론", 3000);
        melon.printData();


    }
}



package day055;

class Ex02 {
    // 접근제어자 : public, private
    // 클래스 멤버변수(클래스 영역에 선언된 변수)에 public이나 private을 붙일 수 있다.
    private int a;
    private int b;
    // 접근제어가 없는 것을 default 라고 부른다.
    int c;
}

public class Day05504캡슐화1 {
    public static void main(String[] args) {

        Ex02 e = new Ex02();

        // 1. private을 붙인 변수는 클래스 내부에서만 사용이 가능하다.
        // 2. 다른 클래스에서는 사용할 수 없다.
        // e.a = 10;	// 에러
        // e.b = 20;	// 에러

        e.c = 30;

    }
}


package day055;

class Student {
    private String name;
    private int age;

    Student(String name, int age){
        setName(name);
        setAge(age);
    }

    void setName(String name) {
        this.name = name;
    }

    void setAge(int age) {
        this.age = age;
    }

    String getName() {
        return name;
    }

    int getAge() {
        return age;
    }

}

public class Day05505캡슐화2 {
    public static void main(String[] args) {

        Student hgd = new Student("홍길동", 11);

        System.out.println(hgd.getName());
        System.out.println(hgd.getAge());

    }
}


package day055;

/*
 * # 래퍼 클래스(wrapper class)
 * - 래퍼 클래스란, 기본 자료형을 클래스로 만들어 놓은 것을 의미한다.
 * [기본형]          [래퍼 클래스]
 * byte             Byte
 * short            Short
 * int              Integer
 * long             Long
 * float            Float
 * double           Double
 * char             Character
 * boolean          Boolean
 */

class MyInteger {
    int num;

    MyInteger(int num) {
        this.num = num;
    }

}

public class Day05506래퍼클래스 {
    public static void main(String[] args) {

        int x = 10;
        Integer y = new Integer(10);

        float a = 10.1f;
        Float b = new Float(10.1);

        double q = 10.1;
        Double w = new Double(10.11);

        MyInteger r = new MyInteger(100);

    }
}





기본이론들 외우고 예제에 많이 써서 익숙해지기