[Java] 클래스 : 필드, 생성자, 메서드

Local Gaji·2023년 8월 14일

이것이 자바다

목록 보기
3/18

🎈 클래스 기본 구성

public class 클래스명 {
  
  // 필드 선언
  String 필드이름1;
  int 필드이름2 = 초기값;
  int 필드이름3;
  ...
  
  // 생성자 : 객체 초기화
  클래스명() { ... }
  
  // 메소드 선언
  int 메소드명() { ... }
}
  • 필드 : 객체의 데이터를 저장
  • 생성자: new 연산자로 객체 생성 시, 객체를 초기화해줌
  • 메서드: 객체가 수행하는 동작 (객체 내부 함수)

🎈 필드

필드는 객체의 고유 데이터, 상태 데이터, 부품 객체를 저장한다,


🔰 필드 선언

클래스 블록 내부에 일반 변수처럼 선언하면 된다.

/* 형식 */

타입 필드명;
타입 필드명 = 초기값;
/* Example */

public class Computer {
  /* 고유 데이터 */
  String company = "애플";
  int maxTemperature = 100;
  
  /* 상태 데이터 */
  boolean isOn;       // 기본값 false
  int temperature;    // 기본값 0
  
  /* 부품 객체 */
  Cpu cpu = new Cpu();
  Board board = new Board();
}

🔰 필드 사용

객체 외부에서 생성자를 이용해서 객체를 생성하고, 필드에 접근한다

public class Example {
  public static void main(String[] args) {
    /* 생성 */
    Computer comA = new Computer();
    
    /* 필드 사용 */
    comA.isOn = true;
    comA.temparature = 10;
    
    /* 필드 값 확인 */
    System.out.println(comA.company);      // 애플
    System.out.println(comA.isOn);         // true
    System.out.println(comA.temparature);  // 10
  }
}

객체 내부에서 생성자 블록이나 메소드 블록에서도 필드의 값을 변경할 수 있다.

public class Computer {
  boolean isOn;     // 기본값 false
  
  /* 생성자에서 사용 */
  Computer() {
    isOn = true;
  }
  
  /* 메서드에서 사용 */
  void method() {
    isOn = true;
  }
}

🎈 생성자


🔰 생성자 선언

ClassName 변수이름 = new ClassName();

new 연산자는 객체의 주소를 return 하고, 변수는 이 주소를 저장한다.


클래스 내부에 항상 객체 초기화를 위한 생성자가 존재하고,
생성자 선언이 없으면 자동으로 기본 생성자를 바이트코드에 추가시킨다.

하지만 생성자를 직접 선언하면 객체를 다양하게 초기화 할 수 있다.

/* Computer.java */
public class Computer {
  /* 생성자 블록 : 선언 */
  Computer(String company, int maxTemperature) { 
    // 초기화 코드
  }
}

/* Example.java */
public class Example {
  public static void main(String[] args) {
    /* 외부 : 생성자 호출 */
    Computer comA = new Computer("Apple", 100);
  }
}

객체마다 같은 값을 가지고 있다면 필드 선언 시 초기값을 지정해주고,
객체마다 다른 값을 가지고 있다면 생성자 블록에서 필드를 초기화한다.


public class iMac {
  /* 필드 선언 */
  String company = "Apple";
  String model;
  int maxT;
  
  /* 생성자 블록 : 매개변수로 초기화 */
  iMac(String model, int maxT) {
    this.model = model;
    this.maxT = maxT;
  }
}

this 는 현재 객체를 가리킨다.
this.model 은 현재 객체의 model 필드, model 은 매개변수 model 이다.


🔰 생성자 오버로딩

필요한 매개변수가 각자 다른 생성자를 여러개 선언하는 것

public class Computer {
  String company;
  int maxT;
  
  Computer() { ... }
  Computer(int maxT) { ... }
  Computer(String company, int maxT) { ... }
}

new 연산자로 생성자 호출 시, 매개변수 상태 보고 알아서 해줌

Computer ComA = new Car();
Computer ComB = new Car(100);
Computer ComC = new Car("Apple", 100);

🎈 메서드


🔰 메서드 선언

/* 형식 */

리턴타입 메서드명 (매개변수...) {
  /* 실행 내용 */
}

리턴값이 없는 메서드는 리턴타입을 void 로 지정한다.


🔰 메서드 호출

객체 외부에서 호출

void outside() {
  Calculator calA = new Calculator();
  
  int plusResult = calA.plus(1, 2);
  double divResult = calA.divide(1, 2);
}

객체 내부에서 호출

public class Calculator() {

  /* 메서드 선언 */
  int plus(int x, int y) {
    return x + y
  }
  double divide(int x, int y) {
    return x / y
  }
  
  /* 메서드 호출 */
  void method() {
    int plusResult = plus(1, 2);
    double divResult = divide(1, 2);
  }
}

🔰 가변길이 매개변수

매개변수의 개수를 모를 때, 가변길이 매개변수로 값을 받으면
값들을 배열 형태로 받을 수 있다.

int sum(int ... values) {
  int result = 0;
  
  for (int val : values) {
    result += val;
  }
  
  return result;
}

🔰 메서드 오버로딩

같은 메서드지만 매개변수의 개수, 타입을 다르게해서 여러개 선언할 수 있다.

/* Example : 출력하는 메서드 */

void print(int x) {
  System.out.println("값 : ", x);
  return;
}
void print(double x) { ... }
void print(String x) { ... }

대표적으로 입력받은 매개변수를 출력하는 메서드에서, 다양한 타입을 받아 출력할 수 있다.


/* Example : 사각형 넓이 구하는 메서드 */

class Calculator {
  /* 매개변수 1개 받음 : 정사각형 넓이 */
  double area(double x) {
    return x * x;
  }
  
  /* 매개변수 2개 받음 : 직사각형 넓이 */
  double area(double x, double y) {
    return x * y;
  }
}

➕ public의 의미

/* ClassName.java */

public class ClassName { ... }
class ClassName2 { ... }

클래스 앞에 public이 붙어있다면 이 클래스의 이름은 파일명과 같아야 한다.
public이 안붙어있으면 파일명과 클래스명이 달라도 된다.


클래스 내부에 생성자가 생략되어있으면 바이트코드에서 자동으로 기본 생성자가 추가되는데
이때 class가 public이면 기본 생성자는 public class로 생성된다

/* ClassName.class */

public class ClassName {
  public ClassName() {}  // 자동 추가
}













0개의 댓글