Java공부(코딩)

코딩초보의 자바(Java)공부 8일차 { 생성자 }

동곤일상 2024. 12. 13. 17:54
반응형

 

오늘은 생성자에
대해서 다뤄볼게요

불금도 빠이팅입니다...


목차

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

 

 

정리)

생성자는 객체생성 직 후

객체 초기화를 위한 메서드라고

생각해주면 됨 !