Java
클래스의 구성 멤버

클래스에는 객체가 가져야 할 구성멤버가 선언된다. 


구성멤버에는 

  1. 필드(Field)
  2. 생성자(Constructor)
  3. 메소드(Method)

가 있다.


public class ClassName {
int fieldName; //필드 : 객체의 데이터가 저장되는곳
ClassName(){ ....}//   생성자 : 객체 생성 시 초기화 역할 담당
void methodName(){.....} //메소드 : 객체의 동작에 해당하는 실행 블록


필드 :

필드는 객체의 고유 데이터,부품객체,상태 정보를 저장하는 곳이다. 선언 형태는 변수 와 비슷하지만, 필드는 변수라고 부르지 않는다. 변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸된다. 하지만 필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재한다.


필드는 클래스 외부에서 사용할 경우 우선적으로 클래스로부터 객체를 생성한 뒤 필드를 사용해야 한다.


[Car.java] Car클래스 필드 선언

public class Car { 
//필드
String company = "현대자동차";
String model = "그랜저";
String color = "검정";
int maxSpeed = 350;
int speed;
}


[CarExample.java] 외부 클래스에서 Car 필드값 읽기와 변경

public class CarExample { 
public static void main(String[] args) {
//객체 생성
Car myCar = new Car();
//필드 값 읽기
System.out.println("제작회사: " + myCar.company);
System.out.println("모델명: " + myCar.model);
System.out.println("색깔: " + myCar.color);
System.out.println("최고속도: " + myCar.maxSpeed);
System.out.println("현재속도: " + myCar.speed);
//필드 값 변경
myCar.speed = 60;
System.out.println("수정된 속도: " + myCar.speed);
}
}

여기서 CarExample.java를 돌려보면 이상한 점이 하나있을것이다. 

바로 Car.java에서 int speed; 라는 필드를 선언하였는데 출력하면 0으로 출력이 된다.

다른 기본 타입 변수들역시 이런식으로 그냥 선언만 해주면 자동으로 초기화가 된다

boolean 타입은 false

String 타입은 null

배열 타입역시 null로 초기화 되는 것을 확인할수있다.


생성자 :

생성자는 new 연산자로 호출되는 특별한 중괄호{ } 블록이다. 생성자의 역할은 객체 생성 시 초기화를 담당한다. 필드를 초기화하거나, 메소드를 호출해서 객체를 사용할 준비를 한다. 생성자는 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어있고 리턴 타입이 없다. 생성자는 new 연산자와 같이 사용되어 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당한다. 객체 초기화란 필드를 초기화하거나,메소드를 호출해서 객체를 사용할 준비를 하는 것을 말한다.생성자를 실행시키지 않고는 클래스로부터 객체를 만들 수 없다.


[Car.java] 생성자 선언

public class Car { 
//생성자
Car(String color, int cc) {
}
}


[CarExample.java] 생성자를 호출해서 객체 생성

public class CarExample { 
public static void main(String[] args) {
Car myCar = new Car("검정", 3000);
//Car myCar = new Car(); (x)
}
}

위에 예제를 보면 Car클래스에 생성자 선언이 있기 때문에 기본생성자(Car())를 호출해서 객체를 생성할 수 없고 Car(String color,int cc)를 호출해서 객체를 생성해야 한다.


생성자 오버로딩(Overloading)


자바는 다양한 방법으로 객체를 생성할 수 있도록 생성자 오버로딩을 제공한다. 생성자 오버로딩이란 매개 변수를 달리하는 생성자를 여러 개 선언하는 것을 말한다. 긴말 필요없이 예를 통해 보도록하자.

public class Car{
Car() {...}
Car(String model) {...}
Car(String model,String color) {...}
Car(String model,String color,int maxSpeed) {...}

생성자 오버로딩 시 주의할 점은 매개 변수의 타입과 개수 그리고 선언된 순서가 똑같을 경우 매개 변수 이름만 바꾸는 것은 생성자 오버로딩이라고 볼 수없다.


Car(String model,String color) {...}

Car(String color,String model) {...} //오버로딩이 아님


생성자가 오버로딩되어 있을 경우,new 연산자로 생성자를 호출할 때 제공되는 매개값의 타입과 수에 의해 호출될 생성자가 결정된다. 다음은 다양한 방법으로 Car 객체를 생성한다.

Car car1=new Car();
Car car2=new Car("그랜져");
Car car3=new Car("그랜져","흰색");
Car car4=new Car("그랜져","흰색",300);


[Car.java] 생성자의 오버로딩

public class Car {
//필드
String company = "현대자동차";
String model;
String color;
int maxSpeed;
//생성자
Car() {
}
Car(String model) {
this(model, null, 0);
}
Car(String model, String color) {
this(model, color, 0);
}
Car(String model, String color, int maxSpeed) {
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
}


[CarExample.java] 객체생성시 생성자 선택

public class CarExample {
public static void main(String[] args) {
Car car1 = new Car();
System.out.println("car1.company : " + car1.company);
System.out.println();

Car car2 = new Car("자가용");
System.out.println("car2.company : " + car2.company);
System.out.println("car2.model : " + car2.model);
System.out.println();

Car car3 = new Car("자가용", "빨강");
System.out.println("car3.company : " + car3.company);
System.out.println("car3.model : " + car3.model);
System.out.println("car3.color : " + car3.color);
System.out.println();

Car car4 = new Car("택시", "검정", 200);
System.out.println("car4.company : " + car4.company);
System.out.println("car4.model : " + car4.model);
System.out.println("car4.color : " + car4.color);
System.out.println("car4.maxSpeed : " + car4.maxSpeed);
}
}


다음은 메소드에 대해 공부하고 포스팅하도록 하겠습니다.

댓글 0