🐰 강의 들은 걸 정리하지 않고 바로 개인 프로젝트를 시작했더니 코드가 지저분 해졌고 배운 내용을 잘 활요하지 못한 느낌이였다. 그래서 머리와 블로그에 정리하고 팀 프로젝트를 시작해보려 한다.
변수의 선언 위치
로 변수의 종류를 결정
클래스 변수 (클래스 영역) : 클래스가 메모리에 올라갈 때
인스턴스 변수 (클래스 영역) : 인스턴스가 생성되었을 때
지역 변수 (클래스 영역 이외의 영역) : 변수 선언문이 수행되었을 때
static이 붙은 것은 클래스 변수, 분지 않은 것은 인스턴스 변수이다.
{
int iv; // 인스턴스 변수
static int cv; // 클래스 변수
void method()
{
int lv = 0; // 지역변수
}
}
public void main(String[] args) {
// 클래스 변수 (static 변수)는 객체생성 없이 '클래스 이름.클래스 변수'로 직접 사용 가능
System.out.println("Card.width = " + Exmple.width);
System.out.println("Card.height = " + Exmple.height);
// Exmple 인스턴스인 e1과 e2는 클래스 변수인 width, height를 공유하기 때문에,
// e1의 width와 height를 변경하면 e2의 width와 height값도 바뀐 것과 같은 결과
Exmple e1 = new Exmple();
e1.kind = "kind1";
e1.number = 1;
Exmple e2 = new Exmple();
e2.kind = "kind2";
e2.number = 2;
// Exmple.width, e1.width, e2.width는 모두 같은 저장공간을 참조하므로 항상 같은 값
e1.width = 50;
e1.height = 100;
}
class Exmple {
String kind; // 인스턴스 변수
int number; // 인스턴스 변수
static int width = 100; // 클래스 변수
static int height = 250; // 클래스 변수
}
int add(int x, int y) {
int result = x + y;
return result; // 결과를 반환
}
int : 반환타입 (출력)
add : 메서드 이름
int x, int y : 매개변수 선언 (입력)
메서드의 작업수행 결과 (출력)인 '반환값'의 타입
반환값이 없는 경우 반환타입으로 void
를 적는다
메서드 이름(값1, 값2, ...); // 메서드를 호출하는 방법
print99danAll(); // void print99danAll();을 호출
int result = add(3, 4); // int add(int x, int y)를 호출하고, 결과를 result에 저장
메서드를 호출할 때 괄호() 안에 지정해준 값들을 '인수' 또는 '인자'라고 한다.
인자의 개수와 순서는 호출된 메서드에 선언된 매개변수와 일치해야 한다.
변수의 값을 읽기만 할 수 있다. (read only)
변수의 값을 읽고 변경할 수 있다. (read & write)
인스턴스의 주소가 복사된다.
클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
클래스 변수는 인스턴스를 생성하지 않아도 사용할 수 있다.
클래스 메서드는 인스턴스 변수를 사용할 수 없다.
메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.
static 메서드는 인스턴스 메서드를 호출할 수 없다.
클래스이름(타입 변수명, 타입 변수명, ... ) {
// 인스턴스 생성 시 수행될 코드,
// 주로 인스턴스 변수의 초기화 코드를 적는다.
}
클래스이름() {}
class Car {
String color;
String gearType;
int door;
Car() {} // 기본 생성자
Car(String c, String g, int d) { // 매개변수가 있는 생성자
color = c;
gearType = g;
door = d;
}
}