일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 오라클
- oracle
- 자바 예제
- DBMS
- Java다운캐스팅
- nodejs
- Java 내부 클래스
- 자바 추상메서드
- 자바 String클래스
- Express
- db
- Java 추상 메서드
- Java try-catch
- 자바 Random클래스
- 자바 내부 클래스
- Java thorw
- database
- Java객체배열
- java super( )
- 자바 스트링클래스
- 자바 try-catch
- 자바 제어문
- 자바 문자열 클래스
- dbeaver
- Java추상클래스
- Java문자열 클래스
- 코딩
- 자바 Wrapper클래스
- Java업캐스팅
- 데이터베이스
- Today
- Total
코딩이란 무엇일까
[Java/자바]클래스-생성자 본문
안녕하세요 오늘은 클래스 부분에서 생성자란 무엇인가?
그리고 생성자를 사용한 예시 코드에 대해 알아보겠습니다.
생성자(Constructor)
생성자는 객체를 생성할 때 초기화를 담당합니다.
우리가 클래스를 만들 때 다양한 필드 값들이 있을 텐데 그 값들을 객체를 생성할 때 초기화를 해주거나 메서드를 호출해서 객체를 사용할 준비를 합니다.
생성자 구조
클래스이름 ( ){ };
생성자의 형태는 클래스 이름과 동일한 이름을 갖습니다.
메서드와 구조가 같다고 생각할 수 있지만 생성자는 이름 앞에 void, int와 같이 리턴 타입이 없다는 게 차이점입니다.
기본 생성자 사용예시
public class Constructor {
public static void main(String[] args) {
new Dclass();
}
}
class Dclass{
//기본 생성자(default 생성자)
Dclass(){
System.out.println("Aclass 기본생성자( )");
}
}
Dclass라는 클래스 안에 기본 생성자를 만들어 주었습니다.
사실 이렇게 클래스 내부에 기본 생성자를 생성하지 않아도
클래스가 생성될 때 컴파일러가 자동으로 기본 생성자를 추가하게 돼 있습니다.
따라서 저희가 새로운 객체를 생성할 때 Dclass D=new Dclass( );
이렇게 적어주는 이유가 바로 기본 생성자를 불러온 것이지요.
출력 결과
생성자에 매개변수 넣어 값 받아오기 예시
public class Constructor3 {
public static void main(String[] args) {
Bclass b1= new Bclass("뇽뇽");
//Bclass b2= new Bclass(); 매개변수 생성자를 만드는 순간 기본 생성자는 자동 생성 X
System.out.println(b1.name);
}
}
class Bclass{
String name;
Bclass(String name){
System.out.println("Bclass의 매개변수 생성자( )");
name=name;
}
}
이번에 사용한 생성자는 매개변수가 있네요?!
생성자에 매개변수를 사용하면 객체를 생성할 때 필드의 값을 초기화할 수 있습니다.
따라서 Bclass b1= new Bclass("뇽뇽");
"뇽뇽"이라는 문자열이 클래스의 필드 값 name에 들어가는 것입니다.
그런데 한 가지 문제점이 있습니다.
생성자 내부를 보면 name=name이 있습니다. 이렇게 변수의 이름을 같게 해주는 이유는 생성자를 초기화할 때 매개변수가 어떤 필드 값인지 코드의 가독성을 높여주려고 같게 해 주는 것인데
위의 코드처럼 name=name으로 돼있으면 사용자가 어떤 게 필드 값인지 어떤게 매개변수인지 헷갈리겠죠?
따라서 이때 사용하는 게 this입니다.
this
this의 형태는 this. 필드 이러한 형태로 사용됩니다.
따라서 위의 생성자에 this를 사용하여 초기화해보자면
Bclass(String name){
System.out.println("Bclass의 매개변수 생성자( )");
this.name=name;
//클래스 내에있는 필드를 this로 명시해줌
}
이렇게 this로 필드에 있는 값과 매개변수로 받은 값을 구분해줄 수 있는 것입니다.
생성자 오버 로딩
메서드의 오버 로딩 기억나시나요? 혹시 모르시는 분들은 아래 글을 참고해 주세요!
https://nangnyamnyomnyomnyom.tistory.com/31
[Java/자바] 메소드 오버 로딩(Overloading)
안녕하세요 오늘은 메소드의 오버 로딩(Overloading)에 대해 알아보려 합니다! 메소드 오버 로딩(Overloading)이란? 메소드의 오버로딩이란 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것을
nangnyamnyomnyomnyom.tistory.com
생성자 오버 로딩은 메서드 거의 비슷하다고 보시면 됩니다.
생성자로 매개변수에 값을 받아올 때 자동차 클래스가 있다고 치면
어떤 객체는 색상, 모델명만 받아올 수도 있고
자동차 클래스로 만들어진 또 다른 객체는 색상, 배기량, 모델명을 받아올 수도 있는 것입니다.
따라서 이때 값을 받기 위해 매개변수들을 달리하여 생성자를 여러 개 만들어주는 것이 생성자 오버 로딩입니다.
`public class Car{
Car ( ) { ...}`
`Car( String model) { … }`
`Car(String model, String color){…}`
`Car(String model, String color, int maxSpeed){ … }`
`}`
위와 같이 car클래스 안에 기본 생성자가 있고
model만 받는 생성자가 있고, color, model을 받아오는 생성자가 있습니다.
이와 같은 생성자이지만 매개변수의 개수를 달리해 생성자 오버 로딩이 이루어집니다.
추가적으로 생성자 오버 로딩을 할 때 주의할 점은
생성자의 매개변수의 개수, 타입에 따라 달라지지만
단순히 매개변수의 순서만 바꾼다 해서 생성자 오버 로딩이 이러나지 않습니다.
잘못된 생성자 오버 로딩의 예시
Car( String model, String color ){…}
Car(String color, String model) {…}
자 이렇게 해서 오늘은 클래스 부분 생성자에 대해 알아보았는데요.
생성자는 아마 클래스를 많이 사용하다 보면 익숙해질 것입니다.
이상으로 포스팅 마치겠습니다.
글 읽어주셔서 감사합니다~

'Java' 카테고리의 다른 글
[Java/자바]다형성(polymorphism),업캐스팅(Upcasting),다운캐스팅(Downcasting) (0) | 2022.10.02 |
---|---|
[Java/자바] 상속과 다형성 (1) | 2022.09.30 |
[Java/자바]객체타입 배열 (1) | 2022.09.30 |
[Java/자바] 클래스(1) 인스턴스(instance) 변수와 클래스변수 (0) | 2022.09.29 |
[Java/자바] 객체지향 프로그래밍이란(Object-Oriednted Programming)? (0) | 2022.09.28 |