JAVA 9강 생성자

YEONG EUN LEE (Chloe)·2023년 12월 19일
0

JAVA 기초

목록 보기
14/42
post-thumbnail

한 개의 java 파일에 여러 개의 클래스를 기술할 때 public 키워드를 붙일 수 있는 조건

클래스명과 자바파일의 이름이 동일해야 함.

일반 클래스와 메인 클래스가 섞여 있는 경우 // 클래스명의 앞의 첫글자는 무.조.건. 대문자로 시작함.
1. 반드시 여러 개의 클래스 중에서 한 개의 클래스만 public 키워드를 붙일 수 있다.
2. 메인클래스를 선언하는 곳의 접근 제어자가 public이어야 한다.
3. 파일명은 public 키워드가 붙어있는 클래스의 이름과 동일해야 함.

일반클래스들만 여러 개가 있는 경우
1. 반드시 여러 개의 클래스 중에서 한 개의 클래스만 public 키워드를 붙일 수 있다.
2. 파일명과 동일한 이름의 클래스에만 public 키워드를 붙일 수 있다. // 파일명과 동일한 class는 반드시 하나 있어야 함.

클래스의 멤버로 존재할 수 있는 것
1. 속성 - 변수, 상수, 객체
2. 기능 - 메소드, 초기화블럭, 생성자
// 조건문, 반복문, 대입문 메소드나 생성자 안에 기술해야함.

생성자(Constructor)

: 클래스에서 인스턴스(객체)를 생성할 수 있도록 도와주는 기능을 처리함.
1. 반드시 클래스명과 동일해야 함.
2. 반드시 리턴타입을 기술하는 기술부 자체가 없음.
3. 객체생성문에서 new라는 키워드 뒤에 호출이 됨.
ex) ExClass ec = new ExClass( ); 객체를 생성할 때, 한번만 호출할 수 있음.
메소드는 여러번 호출할 수 있음.
4. 클래스안에 기술된 생성자가 한개도 없으면 기본생성자가 숨어있음.
5. 클래스안에 기타생성자가 한 개라도 기술되어있으면 기본생성자는 사라짐.
기본생성자를 사용하려면 반드시 기본생성자도 기술해줘야 함.

역할

클래스복제
생성자안의 명령문 실행

생성자 오버로딩의 조건

  1. 클래스의 이름과 생성자들의 이름이 동일해야함
  2. 매개변수의 자료형이 동일할 경우 매개변수의 갯수가 달라야함
  3. 매개변수의 자료형이 달라야 함
  4. 매개변수의 자료형과 매개변수의 갯구가 동일할 경우 매개변수의 순서가 달라야함.

default (기본)생성자 : 클래스안에 기술된 생성자가 한 개도 없으면 기본생성자가 숨어있다.

// 숨어있는 기본 생성자 // 생성자를 직접 생성해도 됨.
public 클래스명( ){ }

[접근제어자] 클래스명() {
[실행문들...;]
}

기타생성자
[접근제어자]클래스명(매개변수...){
[실행문들...;]
}

// 메소드의 가장 중요한 것은 리턴타입과 리턴을 저어줌
//메소드 형식
[접근제어자] [기타제어자] 리턴타입 메소드명([매개변수...]){
실행문들...;
[return 값;]
}

생성자의 목적

: 클래스안의 멤버필드(속성)의 초기화를 진행,

생성자의 형식

//생성자 형식 ---> 리턴값이 아예 없음.
[접근제어자] 클래스명([매개변수...]){

}

class Ex09Class{
	int x; // 멤버변수 --> 인스턴스(속성) // 0
	int y; // 멤버변수 
	
	
	public Ex09Class() { // 생성자 --> 리턴타입이 없어야함.
		System.out.println("매개 변수가 없는 디폴트 생성자");
	}// 생성자 : 객체를 생성할 수 있도록 해주는 기능
	
	public void showPoint() {
		System.out.println(x+", "+y );
	}
}

public class Ex09Main_constructor {
	public static void main(String[] args) { //argument 인자
		// 객체생성문 형식
		// 자료형(=클래스명) 객체명 = new 생성자호출문; // 생성자호출문 => 클래스명()
		Ex09Class e9c = new Ex09Class(); // 클래스를 복제한다 = 객체생성

//		new Ex09Class(); // 매개 변수가 없는 디폴트 생성자(출력 하면 다시 출력하지 않음), 생성자 호출문
		e9c.showPoint();
	}

}

class Ex10Class{
	int x;
	int y;
	//public 클래스명() {} 기본생성자 --> public Ex10Class() {};
	// 아무런 생성자가 없을 때 숨은 기본생성자가 있음 그 외의 경우 사라짐.
	public Ex10Class() {// 생성자 리턴타입의 기술부가 없어서.
		// 클래스의 이름과 동일함 --> 생성자
		x = 5;
		y = 6;
		System.out.println("매개 변수가 없는 디폴트 생성자");
	}
	
	public Ex10Class(int new_x, int new_y) { // 기타생성자, 클래스명과 동일해야함. 
		x = new_x;
		y = new_y;
	}
	
	public void showPoint() {
		System.out.println(x + ", " + y);
	}
}

public class Ex10Main {
	public static void main(String[] args) {
		Ex10Class pt06 = new Ex10Class(); // error 기본생성자는 기타생성자에 의해서 사라짐
		
		Ex10Class pt07 = new Ex10Class(100, 200);// 클래스 안에서 생성자 한개만 실행됨.
		System.out.println(pt07.x + ", " + pt07.y);
		
		Ex10Class pt08 = new Ex10Class(300, 400);
		System.out.println(pt08.x + ", " + pt08.y);
			

	}

}
class T{
	int c; 
}


class E{
	// 메소드 안에 선언 --> 지역변수, 클래스안에 선언 ---> 전역변수.
//	int i; // 멤버 변수 여서 자동초기화 값을 가짐.
//	boolean b; // default false
//	char c; // 공백 한칸
//	double d;// 0.0
//	float f;// 0.0f
//	long l; // 0L 멤버변수 --> 클래스 안에 바로 선언되어 있음. 자동초기화 값이 있음. 
//	String s; //NULL 멤버필드---> 객체, 멤버로 있는 참조변수
//	T t; // 객체 선언, 객체 참조 변수 ---> 주소값을 가지고 있음.
	
	public void md() {
		int i=0; // 지역 변수는 자동초기화 값이 없어서 선언만 해주면 아래 프린트문에서 오류를 발생시킴
		boolean b = false; 
		char c =' '; 
		double d =0.0;
		float f =0.0f;
		long l = 0L; 
		String s =null; 
		T t =null; // int여도 클래스 이면 초기화를 null로 할 수 있음
		
//		int i = 5; // 지역변수는 동일한 이름으로 재선언 불가!
//		int A; boolean B; char C; double D; float F; long L; String S;
	 System.out.println("▼ 멤버면수, 전역변수의 자료형에 다른 초기값");
	 System.out.println("i의 초기값: "+i);
	 System.out.println("b의 초기값: "+b);
	 System.out.println("c의 초기값: "+c);
	 System.out.println("d의 초기값: "+d);
	 System.out.println("f의 초기값: "+f);
	 System.out.println("l의 초기값: "+l);
	 System.out.println("s의 초기값: "+s);
	 System.out.println("t의 초기값: "+t);
	 System.out.println("\n========================================");
	 
	 
	}
}


public class Ex11Main {
	public static void main(String[] args) {
		E e = new E(); // 생성자 호출문
		//기본 생성자 형식 public E() {}
		e.md(); // 호출

	}

}

비교대상이 변수인 경우는 == (동등비교연산자)의의미는 값을 비교하는 연산자
비교대상이 객체인 경우는 ==(동등비교연산자)의 의미는 주소값을 비교하는 연산

0개의 댓글