오늘은 생성자에
대해서 다뤄볼게요
불금도 빠이팅입니다...
목차
1) 생성자가 필요한 이유
1-1) this.
1-2)생성자 도입
1-3) 기본생성자
1-4) 생성자 -오버로딩
1-5) 예제
1) 생성자가 필요한 이유
객체 생성 시점에 작업을
하고싶다면
생성자가 필요하다
다음 예를 한번 보자
public class Member {
String name;
int age;
int grade; }
public static void main(String[] args) {
Member member1 = new Member();
Member member2 = new Member();
MemberInit1(member1, "유동곤", 25, 70);
MemberInit1(member2, "유재석", 50, 100);
Member[] memberList = new Member[] {member1 , member2};
for (Member member : memberList) {
System.out.println(member.name+""
+ "의 나이 : "+member.age+"|"
+ "성적 : "+member.grade);
}
}
static void MemberInit1(Member member , String name , int age , int grade) {
member.name = name;
member.age = age;
member.grade = grade;
}
객체생성시 일일이
초기값 설정 등의 반복을
메서드를 통해 줄여보았어요 !
이 방법도 효율적이진 않아요.
Member 클래스가 객체지향식으로
자기자신의 데이터를 변경하게 끔
만들어볼게요!!!
1-1) this
public class Member {
String name;
int age;
int grade;
void MemberInit(String name , int age , int grade) {
this.name = name;
this.age = age;
this.grade = grade;
}
}
속성과 기능을 한곳에 모아봤습니다.
이 때 MemberInit메서드에 사용한
매개변수와 멤버변수의 이름이 같아요
->
이럴때는 블록 안에있는
매개변수가 우선순위를 가집니다.
name = name 등의 코드를 작성 시
멤버변수 변경X
멤버변수에 접근하기위해서는
this.을 사용해 접근 가능!!
( this 를 생략하고싶다면
매개변수와 멤버변수이름을
다르게 설정 !!)
public class Member {
String name;
int age;
int grade;
void MemberInit(String name_ , int age_ , int grade_) {
name = name_;
age = age_;
grade = grade_;
//멤버변수와 매개변수 이름을 다르게설정하면
this 생략가능!!!
}
}
1-2) 생성자 도입!
프로그래밍을 하다보면
객체생성과 동시에 바로초깃값을
설정해야할 때가 많을거에요
즉 ,계속 메서드를 만들어야한다는거다.
생성자를 이용하면 이와 같은
불편함을 해소해 줄 수 있다.
생성자는 메서드와 비슷하지만
다음과 같은 차이가 있다.
1)생성자의 이름은 클래스 이름과 같아야 한다.
따라서 첫 글자도 대문자로 시작한다.
2)생성자는 반환 타입이 없다. 비워두어야 한다.
(void) 도 안됨.
3)나머지는 메서드와 같다.
이부분이 생성자이다 !
public class Member {
String name;
int age;
int grade;
Member(String name , int age , int grade){
this.name = name;
this.age = age;
this.grade = grade;
}
호출하는 방법은 다음과 같다
Member member1 = new Member("유동곤",25,80);
Member member2 = new Member("하",40,50);
생성자 장점)
Member member1 = new Member();
MemberInit1(member1, "유동곤", 25, 70);
이렇게 메서드를 한번더 호출해야 했지만
이젠 중복을 이렇게 제거할 수 있다
Member member1 = new Member("유동곤",25,70);
제약) 생성자 호출 필수
하지만 생성자를 사용하게 되면 기본객체 생성은 사용할 수 없게 됨
Member member1 = new Member(); --> 오류발생
제약이 있는 코드가 좋은 코드!!!!!! by김영한
1-3) 기본 생성자
앞에서 생성자에 대해서 설명해봤는데
지금까지 저희들은 생성자를
만든 적이 없는데
호출한적이 있죠??
**기본 생성자
매개변수가 없는 생성자를 기본 생성자라 한다.
클래스에 생성자가 하나도 없으면
public class Member {
String name;
int age;
int grade;
Member(){
}
이렇게 자바가 자동으로 만들어준다고
생각하자 !!
자바 컴파일러는 매개변수가 없고,
작동하는 코드가 없는 기본 생성자를
자동으로 만들어준다.
**생성자가 하나라도 있으면 자바는 기본 생성자를 만들지 않는다.**
1-4) 생성자 오버로딩
생성자도 메서드처럼
오버로딩을 사용할 수 있다.
매개변수만 다르게 하면 됨!!
코드로 나타내 보겠습니다.
public class Member {
String name;
int age;
int grade;
Member(String name , int age , int grade){
this.name = name;
this.age = age;
this.grade = grade;
System.out.println("매개변수 3개짜리 생성자");
}
Member(String name , int age){
this.name = name;
this.age = age;
this.grade = 67;
System.out.println("매개변수 2개짜리 생성자");
}
사용코드)
public static void main(String[] args) {
Member member1 = new Member("유동곤",25,80);
Member member2 = new Member("하",40);
출력결과 :
매개변수 3개짜리 생성자
매개변수 2개짜리 생성자
1-5) 예제
public static void main(String[] args) {
// 기본 생성자 사용
Book book1 = new Book();
book1.displayInfo();
// title과 author만을 매개변수로 받는 생성자
Book book2 = new Book("Hello Java", "Seo");
book2.displayInfo();
// 모든 필드를 매개변수로 받는 생성자
Book book3 = new Book("JPA 프로그래밍", "kim", 700);}
book3.displayInfo();
} }
다음 코드가 정상작동 되게 클래스를 만들어보자.
public class Book {
String name;
String author;
int quantity;
//기본 생성자
public Book() {
}
//매개변수3개짜리 생성자
public Book(String name, String author, int quantity) {
this.name = name;
this.author = author;
this.quantity = quantity;
}
//매개변수 2개짜리 생성자
public Book(String name, String author) {
this.name = name;
this.author = author;
}
//출력메서드
public void displayInfo() {
System.out.println(name +"의 저자,"
+author+"| 수량 : "+quantity);
}}
출력:
null의 저자,null| 수량 : 0
Hello Java의 저자,Seo| 수량 : 0
JPA 프로그래밍의 저자,kim| 수량 : 700
정리)
생성자는 객체생성 직 후
객체 초기화를 위한 메서드라고
생각해주면 됨 !
'Java공부(코딩)' 카테고리의 다른 글
코딩초보의 자바(Java)공부 9일차-2 { 접근 제어자 } (0) | 2024.12.14 |
---|---|
코딩초보의 자바(Java)공부 9일차 { 패키지 } (0) | 2024.12.14 |
코딩초보의 Java(자바)공부 7일차 { 객체지향 프로그래밍 } (2) | 2024.12.12 |
코딩초보의 Java(자바)공부 6일차-2 { 기본형과 참조형 } (1) | 2024.12.12 |
코딩 초보의 Java(자바)공부 6일차 -클래스와 데이터- (3) | 2024.12.11 |