Java 혼공자로 공부합니당! (eclipse 사용)
→ 자신의 속성을 가지고 있으면서 식별 가능한 것
→ 속성과 동작으로 구성 = 필드와 메소드라고 할 수 있다.
메소드(method)
💡 리턴값 = 객체.메소드(매개값1, 매개값2, ...);객체는 대부분 다른 객체와 관계를 맺고 있다.
관계의 종류에는 집합 관계, 사용 관계, 상속 관계가 있다.
자동차를 만들 때 처음에 설계도를 보고 만들 듯이,
객체를 만들고 싶으면 우선 설계도를 보며 객체를 만드는 작업이 필요하다.
이때 이 설계도를 클래스라고 부를 수 있다.
클래스에는 필드(field)와 메소드(method)가 정의되어 있고,
클래스로부터 만들어진 객체가 해당 클래스의 인스턴스(instance)이다.
클래스 구성 멤버
객체 지향 프로그래밍 개발 단계
**클래스 이름
⇒ 통상적으로 첫 글자는 영어 대문자로
클래스 선언
public class 클래스이름 {
}
객체 생성
// 객체 생성
new 클래스();
// 클래수 변수 선언과 객체 생성
클래스 변수 = new 클래스 ();
생성자: 클래스() ⇒ 메모리 힙(heap)에 생성됨
new 연산자는 힙 영역에 객체를 생성시킨 후 객체의 번지를 리턴
객체의 고유 데이터, 객제가 가져야 할 부품, 객체의 현재 상태 데이터를 저장하는 곳
생성자 선언과 메소드 선언의 앞 뒤 어느 곳이든 선언 가능(단, 내부만 안됨)
💡 타입 필드 [ = 초기값 ] ;필드 선언 예시
String company = "현대자동차";
String model = "그랜저";
int maxSpeed = 300;
int productionYear; // 자동으로 기본 초기값으로 설정됨
int currentSpeed;
boolean engineStart;
생성자 오버로딩(overloading)
public class Car {
Car() {}
Car(String model) {}
Car(String model, String color) {}
Car(String model, String color, int maxSpeed) {}
}
다른 생성자 호출: this()
리턴타입 메소드이름 (매개변수1, 매개변수2, ...) {
// 메소드 실행 블록
}
메소드 오버로딩(overloading)
인스턴스(instance) 멤버
인스턴스 멤버 선언
public class Car {
// 필드
int gas;
// 메소드
void setSpeed(int speed) { }
}
this
// 매개변수 model의 값을 필드 model에 저장
Car(String model) {
this.model = model;
}
void setModel(String model) {
this.model = model;
}
정적(static) 멤버
public class 클래스 {
// 정적 필드
static 차입 필드 [=초기값];
// 정적 메소드
static 리턴 타입 메소드(매개변수 선언) { }
}
<필드를 선언할 때>
객체마다 가지고 있어야 할 데이터 ⇒ 인스턴스 필드
객제마다 가지고 있을 필요가 없는 공용 데이터 ⇒ 정적 필드
인스턴스 필드를 포함하고 있다면 ⇒ 인스턴스 메소드
인스턴스 필드를 포함하고 있지 않다면 ⇒ 정적 메소드
‼️정적 메소드 선언 시 주의할 점‼️
public class ClassName {
// instance field and method
int field1;
void method1() {}
// static field and method
static int field2;
static void method2() {}
// static method
static void Method3() {
this.field1 = 10; // (X) compile error
this.method1(); // (X) compile error
field2 = 10;
method2();
}
}
인스턴스 멤버를 사용하고 싶다면 객체를 먼저 생성하고 참조 변수로 접근
static void Method3() {
ClassName obj = new ClassName();
obj.field1 = 10;
obj.method1();
}
싱글톤 만들기
public class 클래스 {
// static field
private static 클래스 singleton = new 클래스();
// constructor
private 클래스() {}
// static method
static 클래스 getInstance() {
return singleton;
}
}
final 필드 선언
💡 final 타입 필드 [= 초기값];final 필드의 초기값은 필드 선언할 때와 생성자에서 주는 방법 2가지!