프로그래밍/자바(java) 융합개발자 2차

[취성패] 자바 배우기 - 선수학습(생성자)

aSpring 2020. 12. 12. 20:10
728x90
728x90

1. 생성자 개요

- 객체 생성 과정

  -> 객체에 대한 기억장소 할당

  -> 객체의 변수(속성) 초기화

  -> 생성자 호출

 

- 생성자는 객체가 생성될 때 변수를 초기화하는 작업을 담당

- 생성자는 객체 생성시 자동으로 호출됨 -> 따로 호출하는 등의 작업 필요X

- 생성자의 명칭 부여는 변수명 부여 규칙과 동일하며 반드시 클래스명과 같도록 함

- 생성자의 반환데이터형은 작성하지 않음 -> 반환데이터형이 없다!

- 일반적으로 접근제한자는 외부에서 접근이 가능하도록 public(예약어)으로 부여함

 

 

2. 생성자 정의 및 호출

- 기본 문법

접근제한자 생성자명칭(매개변수 리스트) {   -> 필요시 매개변수 리스트 적음, 없을 수도 있음

  문장;

}

 

- 예 : 클래스명이 TestClass 일 경우

public TestClass() {

  System.out.println("클래스 생성자");      -> 객체가 처음으로 생성될 때 자동으로 출력됨

}

 

- 생성자 호출

  -> 객체 생성시에 생서자가 자동 호출됨

 

-ex)

TestClass test = new TestClass();

          객체변수       생성자

 

 

 

- 생성자 : 객체가 생성될 때 해야 될 일을 담당하는 프로그램 영역

- 생성자 명칭 = 클래스명과 동일. 반환형 없음

 

 

TestCls (클래스명)

 

public TestCls() {

  System.out.println("자바");

}

 

TestCls test = new TestCls(); -> 객체를 만드는 과정

                         생성자를 호출하는 것 =

 

-> 이 문장이 처리됨과 동시에 "자바"가 출력됨

 

+ 생성자 활용 예제

 

public class MyExam {                                -> MyExam 클래스

 MyExam(String language) {                        -> 생성자명도 MyExam(클래스명과 동일), 앞에 반환데이터명 X

   System.out.println(language + "생성");        -> 문자열을 받아서 "생성"과 결합

 }                                                           -> 여기까지가 생성자의 영역

 public static void main(String args[]) {        -> 객체 생성을 위해 main method 하나가 필요

   MyExam ex1 = new MyExam("Java");        -> MyExam의 객체 ex1, 2, 3 세개 생성 -> new 연산자 사용

   MyExam ex2 = new MyExam("C++");        -> C++이라는 문자열이 language에 들어감 

   MyExam ex3 = new MyExam("Basic");

 }                                                            -> 메인 메소드 영역

 

->

Java생성

C++생성

Basic생성

 

println은 줄바꿈이 이뤄짐

 

생성자 작성 시 반드시 클래스 명칭과 동일

인수 사용해서 생성자 만들 수도 있음

변수를 이용해서 인수를 받아들여 서로 다른 형태의 객체 생성 가능

 

 

[생성자 오버로딩]

1. 생성자 오버로딩 개요

- 메서드 오버로딩과 유사하며 생성자의 매개변수를 다르게 하여 여러 개의 생성자를 작성할 수 있는 기법

- 여러 개의 오버로딩 된 생성자를 정의할 수 있음

- 생성자 오버로딩 조건

  -> 매개변수의 개수가 다름

  -> 매개변수의 데이터형이 다름

 

ex) 다음 두 생성자는 오버로딩 된 경우임

class TestClass

public TestClass(){     -> 디폴트 생성자 : 매개변수가 없는 생성자

  문장;

}

public TestClass(int num) {    -> 매개변수가 있음

  문장;

}

 

 

2. 디폴트 생성자

- 클래스 정의시 생성자를 반드시 작성하지 않아도 되며 이 경우 디폴트 생성자가 내부에서 자동적으로 정의됨

- 디폴트 생성자는 매개변수 없는 형태의 생성자와 모양이 동일함

- 프로그래머가 어떤 형태든지 생성자를 정의했을 경우 디폴트 생성자는 자동으로 정의되지 않음

- 특별한 경우가 아니면 처리해야 할 내용이 없더라도 비어있는 형태의 디폴트 생성자를 프로그래머가 정의하는 것이 바람직함

 

 

class TestCls {

 int num;          -> 생성자를 작성하지 않고 클래스 선언.

}                     -> 이걸 사용하기 위해서 아래에 

Testcls test = new Testcls();     -> 객체 생성

 

class TestCls {

 int num; 

}        

public TestCls(){   -> 직접 생성자 작성

}                      

Testcls test = new Testcls();     -> 객체 생성하여 호출

 

 

- 생성자 정의 및 오버로딩 예

public class Exam11_1 {

        public Exam11_1() {     -> 반환타입 없는 메서드. 생성자

               System.out.prinln("이 부분은 생성자");

        }

        public Exam11_1(int num) {

               for (int i = 0; i < num; i++) {

                       System.out.println("오버로딩된 생성자");

               }

        }

        public static void main(String[] args) {

               //  T0000 Atugo-generated method stub

               Exam11_1 ex1 = new Exam11_1();

               Exam11_1 ex2 = new Exam11_1(3);

        }

}

 

->

이 부분은 생성자

오버로딩된 생성자

오버로딩된 생성자

오버로딩된 생성자

728x90
728x90