옝옹
냠
옝옹
전체 방문자
오늘
어제
  • 분류 전체보기 (84)
    • [LG유플러스]유레카 SW (5)
    • React (20)
    • JS (17)
    • TypeScript (5)
    • CSS & HTML (1)
    • 알고리즘 (11)
    • JAVA (20)
    • GIT (1)
    • 자격증 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • useRef
  • join() 메서드
  • java
  • toFixed
  • 노마드코더
  • js
  • JavaScript
  • indexOf()
  • map
  • continue문
  • sort() 메서드
  • TypeScript
  • 기본api클래스
  • ==
  • 자바스크립트
  • 타입변환
  • 함수선언
  • join()
  • match()
  • useMemo
  • useCallback
  • 코드스플리팅
  • 혼자공부하는자바
  • 자바스트립트
  • useEffect
  • 리액트를다루는기술
  • template literal
  • 템플릿리터럴
  • 자바
  • fillter
  • do-while문
  • java.lang패키지
  • 변수선언
  • 인스턴스멤버
  • java.util패키지
  • 정적멤버
  • 접근제한자
  • 백준
  • Node.js
  • reverse() 메서드
  • 타입스크립트
  • useState
  • reduce
  • While문
  • 화살표함수
  • 혼자 공부하는 자바
  • 리액트
  • break문
  • map() 함수
  • switch문

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
옝옹

냠

생성자
JAVA

생성자

2022. 10. 12. 20:54

생성자

- new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당

- 모든 클래스는 생성자가 반드시 존재하며, 생성자를 하나 이상 가질 수 있다.

객체 초기화

  • 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것
  • 생성자를 실행하지 않고는 클래스로부터 객체를 만들 수 없다.

기본 생성자

 우리가 클래스 내부에 생성자 선언을 생략했다면 컴파일러는 다음과 같이 중괄호 {} 블록 내용이 비어 있는 기본 생성자를 바이트 코드에 자동 추가

[public] 클래스() {}

 

 

 

 

예를 들어 Car 클래스를 설계할 때 생성자를 생략하면 기본 생성자가 다음과 같이 생성한다.

그렇기 때문에 클래스에 생성자를 선언하지 않아도 다음과 같이 new 연산자 뒤에 기본 생성자를 호출해서 객체를 생성할 수 있습니다.

Car myCar = new Car();

 

 

 

 

생성자 선언

기본 생성자 대신 우리가 생성자를 명시적으로 선언하려면 다음과 같은 형태로 작성

클래스(매개변수선언, ...) {
	//객체의 초기화 코드
}
// 세 매개값을 생성자가 받기 위해서는 다음과 같이 매개 변수를 선언 
public class Car {
	//생성자
	Car(String model, String color, int maxSpeed) { ••• }
}
//  Car 생성자를 호출할 때 3개의 매개값을 제공한다고 가정
public class CarExample {	
    public static void maingtring후] args) {
		Car my Car = new Car("그랜저", "검정", 300);
        // Car my Car = new Car(); (x) 기본 생성자를 호출할 수 없음
        }
}

필드 초기화

- 클래스로부터 객체가 생성될 때 필드는 기본 초기값으로 자동 설정

- 다른 값으로 초기화하는 방법

  1. 필드를 선언할 때 초기값을 주는 방법

        - 동일한 클래스로부터 생성되는 객체들은 모두 같은 값을 갖게 된다. 

public class Korean {
String nation = "대한민국";
String name;
String ssn;
}

Korean kl = new Korean();
Korean k2 = new Korean();
//  Korean 클래스로부터 kl과 k2 객체를 생성하면 kl과 k2 객체의 nation 필드에는 모두 “대한민국”이 저장

  2. 생성자에서 초기값을 주는 방법

      - 객체 생성 시점에 외부에서 제공되는 다양한 값들로 초기화할 때 사용

public class Korean {
	//필드
    String nation = "대한민국";
    String name;
    String ssn;
	
    //생성자
    public Korean(String n, String s) { 
        name = n;
        ssn = s;
	}
}
Korean kl = new Korean("박자바", "011225-1234567");
Korean k2 = new Korean("김자바", "930525-0654321");

// 매개 변수 n(이름), s(주민번호)를 통해 전달되어 name 필드와 ssn필드의 초기값으로 사용
  • 일반적으로 통상적으로 필드와 동일한 이름을 갖는 매개 변수를 사용하는데, 이 경우 필드 앞에 'this.'를 붙이면 된다.
  • this는 객체 자신의 참조인데, 우리가 우리 자신을 ‘나’라고 하듯이 객체가 객체 자신을 this라고 한다.
  • ‘this.필드’는 this라는 참조 변수로 필드를 사용하는 것과 동일
public Korean(String name, String ssn) { 
    this.name = name;
    this.ssn = ssm;
}

생성자 오버로딩

매개 변수를 달리하는 생성자를 여러 개 선언하는 것

다른 생성자 호출 : this()

  • 필드 초기화 내용은 한 생성자에만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법
  • this()는 자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫 줄에서만 허용
  • this() 다음에는 추가적인 실행문들이 올 수 있다. 이 말은 호출되는 생성자의 실행이 끝나면 원래 생성자로 돌아와서 다음 실행문을 진행한다는 뜻

 

확인 문제

1. 생성자에 대한 설명으로 맞는 것에 O표, 틀린 것에 X표 하세요. 

① 객체를 생성하려면 생성자 호출이 반드시 필요한 것은 아니다.( X )

 -> 모든 클래스는 생성자가 반드시 존재하며, 생성자를 하나 이상 가질 수 있다.
② 생성자는 다른 생성자를 호출하기 위해 this()를 사용할 수 있다. ( O )

③ 생성자가 선언되지 않으면 컴파일러가 기본 생성자를 추가한다. ( O )
④ 매개 변수의 수, 타입, 순서가 다른 생성자를 여러 개 선언할 수 있다. ( O )

 

2. 다음과 같이 Member 객체를 생성하고 싶습니다. 생성자에서 name 필드와 id 필드를 외부에서 받은 값으로 초기화할 수 있도록 Member 클래스를 작성해보세요.

 

package ch6.test;

public class Member {
	String name;
	String id;
	String password;
	int age;
	
Member(String name, String id) { // 생성자에서 초기값을 주는 방법
	this.name = name;
	this.id = id;
	}
}

3. Board 클래스의 생성자가 다음과 같이 오버로딩되어 있습니다. 생성자마다 중복 코딩된 부 분이 있습니다. this()를 활용해서 중복 코드를 제거 해보세요.

package ch6.test;

public class Board {
	String title;
	String content;
	String writer;
	String date;
	int hitcount;
	
	Board(String title, String content) {
		this(title, content, "로그인한 회원아이디", "현재 컴퓨터 날짜", 0);
	}
	
	Board(String title, String content, String writer) {
		this(title, content, writer, "현재 컴퓨터 날짜", 0);
	}
	
	Board(String title, String content, String writer, String date) {
		this(title, content, writer, date, 0);
	}
	
	Board(String title, String content, String writer, String date, int hitcount) {
		this.title = title;
		this.content = content;
		this.writer = writer;
		this.date = date;
		this.hitcount = hitcount;
	}
}

4. Board 클래스가 위와 같이 선언되어 있을 경우 Board 객체를 생성하는 네 가지 방법을 모두 기술해보세요.

Board board = new Board("제목", "내용");
Board board = new Board("제목", "내용", "홍길동");
Board board = new Board("제목", "내용", "홍길동", "2025-12-31");
Board board = new Board("제목", "내용", "홍길동", "2025-12-31", 0);

 

저작자표시 비영리 변경금지 (새창열림)

'JAVA' 카테고리의 다른 글

인스턴스 멤버와 정적 멤버  (0) 2022.10.13
메소드  (0) 2022.10.13
열거 타입  (1) 2022.09.26
배열  (2) 2022.09.26
참조 타입  (2) 2022.09.26
    'JAVA' 카테고리의 다른 글
    • 인스턴스 멤버와 정적 멤버
    • 메소드
    • 열거 타입
    • 배열
    옝옹
    옝옹

    티스토리툴바