과거⚰️
생성자이론 || 오버로딩 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);
}
}
기본이론들 외우고 예제에 많이 써서 익숙해지기