java015

제로·2022년 9월 6일
0

Java basic

목록 보기
14/45
post-custom-banner

생성자

  1. 필드 초기화
    1) 초기값없이 선언된 필드는 객체가 생성될 때, 기본값으로 자동 설정할 수 있다.
    2) 다른 값으로 필드 초기화하는 방법
    - 필드 선언할 때, 초기값을 설정한다.
    - 생성자의 매개값으로 초기값을 설정한다.
    - 매개변수와 필드명이 같은 경우 this를 사용한다.
  2. 생성자 기본 형식
    1) new 연산자에 의해 호출되어 객체의 초기화를 담당한다.
    new 클래스()
    - 필드값 설정
    - 메서드를 호출해서 객체를 사용할 수 있도록 준비하는 역할
  3. 기본 생성자(default 생성자)
    1) 모든 클래스는 생성자가 반드시 존재하며 하나 이상 가질 수 있다.
    2) 생성자 선언을 생략하면 컴파일러는 다음과 같은 기본 생성자를 추가한다.
    	class Car{					class Car{
				     ==(컴파일)==>      public Car(){} // 자동추가				        
        }
        Car c1 = new Car();
  1. 생성자 선언
    1) 위 기본 생성자 대신 개발자가 직접 선언
    생성자(매개변수1, 매개변수2 ...){}
    2) 개발자가 선언한 생성자가 존재할 시, 컴파일러는 기본 생성자를 추가하지 않는다.
    new 연산자로 객체 생성지 개발자가 선언한 생성자만 사용할 수 있다.
  2. 생성자의 다양화
    1) 생성자는 초기값 설정에 따라 여러개를 선언할 수 있다.
    2) 객체 생성할 떄, 외부 값으로 객체를 초기화할 필요가 있고
    3) 외부 값이 어떤 타입으로 몇 개가 제공될지 모르기에 생성자도 다양화할 수 있다
  3. 생성자의 오버로딩(Overloading)
    1) 생성자는 매개변수의 객수, 타입, 순서가 다르면 여러개 선언이 가능하다.
public static void main(String[] args) {
		company c1 = new company();
		company c2 = new company("삼성전자");
		company c3 = new company("이베이",124,1827000);
		company c4 = new company("오리온",150);
		company c5 = new company(150,"오리온");
        }
        
class company{	
	String name;
	int empNum;
	int earMoney;
	company(){}
	company(String name){
		this.name = name;
	}
	company(String name,int empNum){
		this.name = name;
		this.empNum = empNum;
	}
	company(int empNum, String name){
		this.name = name;
		this.empNum = empNum;
	}
	company(String name, int empNum, int earMoney){
		this.name = name;
		this.empNum = empNum;
		this.earMoney = earMoney;		
	}

}

다른 생성자 호출(this)

  1. 생성자 오버로딩되면 생성자 간의 중복된 코드 발생
  2. 초기화 내용이 비슷한 생성자들에서 이러한 현상을 많이 볼 수 있다.
  3. this 사용 방법
    1) 초기화 내용을 한 생성자에 몰아서 작성
    2) 다른 생성자는 초기화한 내용을 작성한 이전 생성자를 this.로 호출
class Music{
	String name;
	String singer;
	String album;
    Music(){
		this.name = "무명";
		this.singer="지정안됌";
		this.album="지정안됌";
	}
    Music(String name){
		this();	// 선언된 생성자를 호출해서 아래 default데이터 자동 설정
		this.name=name; // singer와 album 값은 위 this();로 인해 생략가능
    }
    Music(String name,String singer){
		this(name);	// 매개변수가 있는 생성자 호출
		this.singer=singer;
	}
	Music(String name,String singer,String album){
		this(name,singer); // 매개변수가 2개 있는 생성자 호출
		this.album=album;
        this(name,singer); // 에러발생. 생성자는 반드시 첫 라인에 선언해야함
	}
    }

생성자와 메서드의 매개변수 처리

  1. 기능적으로 처리하는 함수형에서는 매개변수를 효율적으로 처리하는 것이 필요하다.
  2. 주로 외부에서 데이터를 입력했을 때, 순서와 타입에 따라 선언된 내용을 처리한다.
  3. 선언
    1) 생성자 선언
    Person(){}
    Person(int num){}
    Person(String name){}
    Person(String name, int age){}
    Person(int age, String name){}
  4. 호출
    1) 객체 생성시 호출
    Person p01 = new Person();
    Person p02 = new Person(12);
    Person p03 = new Person("철수");
    Person p04 = new Person("영희",25);
    Person p05 = new Person(55,"민기");
    // 선언된 데이터유형과 갯수에 맞게 생성하여야 한다.

cf) 참고

main(){
Home ho1 = new Home(2.3F); //float 타입으로 선언
System.out.println(ho1.data1);
Home ho2 = new Home(129817270918L);	//long 타입으로 선언
System.out.println(ho2.data2);
Home ho3 = new Home((byte)25); //기본 데이터 유형이 int이기에 casting해서 전달해야한다
}

class Home {
	float data1;
	long data2;
    byte data3;
	Home(float data1){
		this.data1 = data1;
	}
	Home(long data2){
		this.data2 = data2;
	}
    Home(byte d){
		this.data3 = d;
	}
}
profile
아자아자 화이팅
post-custom-banner

0개의 댓글