public class 클래스명 {
// 필드 선언
String 필드이름1;
int 필드이름2 = 초기값;
int 필드이름3;
...
// 생성자 : 객체 초기화
클래스명() { ... }
// 메소드 선언
int 메소드명() { ... }
}
필드는 객체의 고유 데이터, 상태 데이터, 부품 객체를 저장한다,
클래스 블록 내부에 일반 변수처럼 선언하면 된다.
/* 형식 */
타입 필드명;
타입 필드명 = 초기값;
/* 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;
}
}
/* ClassName.java */
public class ClassName { ... }
class ClassName2 { ... }
클래스 앞에 public이 붙어있다면 이 클래스의 이름은 파일명과 같아야 한다.
public이 안붙어있으면 파일명과 클래스명이 달라도 된다.
클래스 내부에 생성자가 생략되어있으면 바이트코드에서 자동으로 기본 생성자가 추가되는데
이때 class가 public이면 기본 생성자는 public class로 생성된다
/* ClassName.class */
public class ClassName {
public ClassName() {} // 자동 추가
}