728x90
반응형
생성자
// Student s1 = new Student();
// 0. Student 클래스의 내용이 메모리 적재
// 1. main 메소드의 STACK 여역에 s1이 생성
// 2. new 연산자에 의해서 Student 클래스의 객체가 HEAP 메모리에 생성
// 2-1. Student 클래스의 생성자가 호출!
// 3. s1 변수에 생성된 Student 객체의 HEAP 주소가 반환
// 생성자
// - 클래스의 각 객체를 생성할 때, 최초 단 한번 실행되는 '메소드'
// - 멤버필드의 초기화 역할을 담당하는 메소드
// - public 클래스명() {}
// 학생 클래스의 선언
class Student {
// 정보은닉의 개념으로 멤버 변수는 외부 접근이 차단
private String name;
// 생성자의 선언
// 1. 메소드
// 2. 클래스의 이름과 동일한 이름을 갖는 메소드
// 3. 리턴값의 타입이 없는 메소드
// 4. 만약, 생성자를 선언하지 않으면 컴파일러 수준에서 디폴트 생성자를 제공합니다.
// - 디폴트 생성자 : 생성자의 매개변수가 없고, 아무것도 하지않는 메소드
// - public Student() {}
public Student() {
System.out.println("생성자 실행!!");
name = "아직 이름이 없어요...";
}
// private 멤버인 name을 위한 getter / setter 메소드
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Class_05_Constructor {
public static void main(String[] args) {
// 클래스의 객체를 생성한 후, 각 멤버 변수의 값을 설정하는 방식
// - 객체의 생성 코드와 설정하는 코드가 분리
Student s1 = new Student();
System.out.printf("학생의 이름은 %s 입니다.\n", s1.getName());
s1.setName("아무개");
System.out.printf("학생의 이름은 %s 입니다.\n", s1.getName());
Student s2 = new Student();
System.out.printf("학생의 이름은 %s 입니다.\n", s2.getName());
// 생성자는 객체의 생성 시, 1번만 호출됩니다.
// 그리고 생성자는 메소드이지만, 불완전한 메소드입니다.
// 그렇기 때문에 객체의 레퍼런스 변수를 사용한 호출은 허용되지 않습니다.
// (객체가 생성될 때 자동으로 실행됩니다.)
// s2.Student();
}
}
// 생성자
// - 객체의 생성에 역할(멤버변수의 초기화)을 하는 메소드
// - 생성자는 메소드이기 때문에 매개변수를 가질 수 있습니다.
// - Scanner in = new Scanner(System.in);
class A {
private int num;
// 매개변수를 사용하는 생성자의 예시
// - A 클래스는 객체를 생성할 때, 생성자에 정수형 값을 전달해야만
// 객체를 생성할 수 있습니다.
// - 생성자의 매개변수를 사용하여 각각의 객체가 서로다른 값을 가지는 객체로
// 생성할 수 있습니다.
public A(int n) {
num = n;
}
public void display() {
System.out.printf("num = %d\n", num);
}
}
public class Class_06_Constructor {
public static void main(String[] args) {
A a1 = new A(15);
a1.display();
A a2 = new A(77);
a2.display();
// 중요!!!
// - 생성자는 개발자가 정의하지 않으면 컴파일러 수준에서 디폴트 생성자가 생성됩니다.
// - 클래스의 생성자를 하나라도 정의하면, 컴파일러는 디폴트 생성자를
// 제공하지 않습니다.
// A a = new A();
}
}
// 생성자는 메소드
// 생성자는 이름이 결정된 메소드 - 항상 클래스명과 동일!!!
// 메소드는 메소드명 + 매개변수를 기준으로 구분이 됩니다 - 메소드 오버로딩
// 생성자는 메소드 오버로딩이 적용될 수 있습니다.
// - 생성자 오버로딩이 적용된 클래스는 각각의 객체를 서로다른 생성자를 사용하여
// 생성할 수 있습니다.
class B {
public B() {
System.out.println("B() 실행");
}
public B(int i) {
System.out.println("B(int) 실행");
}
public B(double d) {
System.out.println("B(double) 실행");
}
}
public class Class_07_Constructor {
public static void main(String[] args) {
// 오버로딩된 생성자를 선택하여 객체를 생성하는 코드
B b1 = new B();
B b2 = new B(1);
B b3 = new B(1.1);
}
}
생성자 오버로딩 & 메소드 오버로딩 예제
package chapter02;
class GuGuDan {
// 생성자 오버로딩
// 1. 클래스가 시작할때 생성자를 1회만 실행
public GuGuDan() {
// 2. 1회만 실행을 밑의 메소드인 display()를 실행
display();
}
// 6. 구구단의 단을 출력하는 메소드를 만듬.
public GuGuDan(int dan) {
display(dan);
}
// 메소드 오버로딩
// 3. 실행 메소드 안에 2단부터 9단까지의 for문을 만듬
public void display() {
for( int i = 2 ; i < 10 ; i++ )
// 4. 반복문을 돌면서 int값의 매개변수가 있는 메소드로 전달.
display(i);
}
// 5. 매개변수 i를 받아 dan에 넣어서 출력화면을 보여줌
public void display(int dan) {
System.out.printf("%d단을 출력합니다.\n", dan);
for( int j = 1 ; j < 10 ; j++ )
System.out.printf("%d * %d = %d\n", dan, j, dan*j);
System.out.println();
}
}
public class Class_08_Constructor_EX {
public static void main(String[] args) {
GuGuDan g = new GuGuDan();
//GuGuDan g1 = new GuGuDan(5);
}
}
GuGudan g = new GuGuDan() 을 출력하면
2 ~ 9단까지 불러온다.
GuGuDan g1 = new GuGuDan(5); 2~9까지의 원하는 숫자를 입력하면 그에 해당하는 구구단이 나온다.
생성자 예제
// 계산기 클래스
class Calculator {
// 연산부호 저장 변수
private char op;
// 생성자를 사용하여 연산부호를 결정
public Calculator() {
op = '+';
}
public Calculator(char operator) {
op = operator;
}
public String getOp() {
return op + " 계산기 입니다.";
}
public void execute(int n1, int n2) {
int r;
switch( op ) {
case '+' :
r = n1 + n2; break;
case '-' :
r = n1 - n2; break;
case '*' :
r = n1 * n2; break;
case '/' :
r = n1 / n2; break;
case '%' :
r = n1 % n2; break;
default :
r = 0;
}
System.out.printf("%d %c %d = %d\n", n1, op, n2, r);
}
}
public class Class_09_Constructor_EX {
public static void main(String[] args) {
Calculator c1 = new Calculator();
Calculator c2 = new Calculator('-');
Calculator c3 = new Calculator('*');
Calculator c4 = new Calculator('/');
Calculator c5 = new Calculator('%');
System.out.println(c1.getOp());
System.out.println(c2.getOp());
System.out.println(c3.getOp());
System.out.println(c4.getOp());
System.out.println(c5.getOp());
c1.execute(10, 15);
c2.execute(10, 15);
c3.execute(10, 15);
c4.execute(10, 15);
c5.execute(10, 15);
}
}
728x90
반응형
'개발 > JAVA' 카테고리의 다른 글
자바 객체지향 (4) - static, static 멤버 변수의 활용, static 키워드가 정의된 메소드 (0) | 2020.06.14 |
---|---|
자바 객체지향 (3) - this, (0) | 2020.06.14 |
자바 객체지향 (1) - 객체지향, 접근지정자, Setter / Getter 메소드 (0) | 2020.06.14 |
자바 메소드 오버로딩 (0) | 2020.06.14 |
자바 메소드( Method ) (0) | 2020.06.14 |