일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 관계형 데이터베이스
- CS 기초지식
- ERD
- SW
- exception
- CS50
- Java Programming
- java
- 객체지향
- 데이터베이스 모델링
- 면접을 위한 CS 전공지식 노트
- Computer Science
- 기초프로그래밍
- 상속
- 알고리즘
- w3schools
- til
- 이진법
- edwith
- 모두를 위한 컴퓨터 과학
- 모두를 위한 컴퓨터 과학(CS50)
- CS 기초
- ssafy
- 예외처리
- WebProgramming
- Compute Science
- 삼성청년SW아카데미
- CS기초지식
- SSAFY 9기
- 부스트코스
- Today
- Total
Joslynn의 하루
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -8일차 노트 필기_생성자(Constructor)_220727 본문
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -8일차 노트 필기_생성자(Constructor)_220727
Joslynn 2022. 7. 27. 18:02Constructor (생성자)
: 특별한 method
: 반드시 method 이름이 class 이름과 같다. (method 이름이 대문자로 시작)
: 일반적인 method 선언과 같지만 returnType 자리가 없다. (void도 기재 X)
modifier class이름([dataType 이름]) { }
: 객체가 생성(new)되는 시점에 무조건 딱 한 번만 호출
: java의 모든 객체는 반드시 한 개 이상의 생성자를 갖는다. (여러개도 가질 수 있음;)
프로그래머가 생성자를 하나도 작성하지 않으면, default 생성자가 자동으로 만들어진다.
modifier class이름() { } // 인수가 없는 constructor
: Overloading이 가능하다. (하나의 class 내에 이름이 같은 메소드가 여러 개, but 인수가 다른 것;)
<Constructor (생성자) 선언 예시>
class Test{
// 기본 생성자 삽입된다.
Test(){}
}
//---------------------------------------------------------
class Test{
// 오버로딩 가능
Test(){}
private Test(int i){}
Test(String str){}
}
: new Test(); // 객체 생성 시 method 3개 포함;
**객체 생성 방법
new class.이름(값, 값, 값.....); // 지금까지의 new 객체 생성은 인수가 없는 default Constructor를 호출한 것과 동일;
== new Constructor(값, 값, 값....);
class Test{
Test(){} // 1번
private Test(int i){} // 2번
Test(String str){} // 3번
Test t = new Test(); // 1번 메소드 호출
Test t = new Test("A"); // 3번 메소드 호출
Test t = new Test (5); // 2번 메소드 호출
// Test t = new Test (true); // 호출 불가
}
:현재 class 내에서 다른 생성자를 호출하는 문법
: this([값, 값, 값]) Constuctor 구현부 첫번째 줄에서 다른 생성자 딱 한 번 호출 가능
class Test{
//1번 method
Test(){
this(5); // int형 하나 받는 생성자 호출
}
//2번 method
Test(int i){
this("안녕"); // String 하나 받는 생성자 호출
}
//1번 method
Test(String s){
}
/*객체가 생성되는 시점에 한 번에 여러개의 호출콜을 할 수 있음 */
}
이후 this와 super 구분을 잘 해야함;
// super: 자식 클래스가 자신을 생성할 때 부모 클래스의 생성자를 불러 초기화 할때; (기본적으로 자식 클래스의 생성자에 추가)
예제1)
//ConstructorExam.java
class Puppy{
//String,int 타입 전역 변수 선언(member 변수선언)
String str;
int i;
/* 메소드 printPuppyName작성
인수없음, 리턴안함
"public void printPuppyName() 호출되었습니다!"출력
전역변수를 출력
*/
public void printPuppyName(){
System.out.println("public void printPuppyName() 호출되었습니다!");
System.out.println("String Str: "+str);
System.out.println("int i: "+ i);
}
/*인수가 없는 생성자 작성
"생성자 public Puppy() 호출되었습니다!"출력
printPuppyName메소드 호출
전역변수 String에"메리" 할당
전역변수 int에 -98998 할당
*/
public Puppy(){
System.out.println("생성자 public Puppy() 호출되었습니다!");
this.printPuppyName();
this.str = "메리";
this.i = -98998;
}
}
class ConstructorExam{
//메인메소드에서
public static void main(String [] agrs){
//**중요! Puppy객체 생성 == 객체가 생성되는 시점에 맴버필드 초기화, 생성자를 호출
Puppy pp = new Puppy();
//Puppy객체의 printPuppyName메소드 호출
System.out.println();
pp.printPuppyName();
}
}
출력값)
Constructor (생성자)의 효용
: 생성자는 객체가 생성되는 시점에 자동 호출 ==> 객체가 생성되는 시점에 해야할 일이 있을 때 사용; 직접 호출 안해도 됨,
: 객체의 init method 대신 사용할 수 있음; (데이터 초기값 세팅==초기화) // but 재사용은 불가;
: 재사용 불가; 또 사용해야 하는 기능이라면 생성자에서는 할 수 없다.
자주 활용되는 생성자 기능
: 객체의 데이터를 초기화 하는 작업 가장 많이 함
→ 객체가 생성되는 시점에 constructor 사용해서 초기화 가능 ↔ setter method의 효용: 데이터 수정
중요!! 생성자를 하나라도 작성을 하면, 기본 생성자는 자동으로 선언되지 않음;
따라서, 생성자 선언 시 기본 생성자도 같이 만들어주는 것이 나음;