public class와 class
1개의 파일에 여러 클래스를 구성할 수 있다.
이때 public 속성은 하나의 클래스만 가져야 하고, public 속성을 가지는 클래스는 파일명과 동일해야 한다.
//파일명: MyDemo.java
package day06;
public class Car{ //컴파일 에러 → class Car로 수정해야 함
}
public class MyDemo {
}
public class Car가 되려면 파일명이 Car.java여야 한다.
static
멤버 변수(필드)의 종류
- 인스턴스 변수(non-static)
- static이 붙지 않은 멤버 변수는 인스턴스를 생성해야 사용할 수 있고, 인스턴스에 소속되어 있다.
- 인스턴스 변수는 인스턴스를 만들 때마다 새로 만들어진다.
- non-static은 객체를 생성한 뒤 '객체명.' 식으로 접근해야 한다. - 클래스 변수(static)
- static이 붙은 멤버 변수는 클래스에 바로 접근해서 사용할 수 있고, 클래스 자체에 소속되어 있다.
- 보통 여러 곳에서 공유하는 목적으로 사용된다.
- static은 '클래스명.' 식으로 접근해야 한다.
class Car{
String color; //인스턴스 변수
static int capacity; //클래스 변수
}
멤버 메서드의 종류
- 인스턴스 메서드(non-static)
- static이 붙지 않은 멤버 메서드는 인스턴스를 생성해야 사용할 수 있고, 인스턴스에 소속되어 있다.
- 인스턴스 메서드는 인스턴스를 만들 때마다 새로 만들어진다.
- non-static은 객체를 생성한 뒤 '객체명.' 식으로 접근해야 한다. - 클래스 메서드(static)
- static이 붙은 멤버 메서드는 클래스에 바로 접근해서 사용할 수 있고, 클래스 자체에 소속되어 있다.
- 보통 여러 곳에서 공유하는 목적으로 사용된다.
- static은 '클래스명.' 식으로 접근해야 한다.
- static 메서드는 static 변수만 사용할 수 있다.
package day06;
class Car{
String color; //인스턴스 변수
static int capacity; //클래스 변수
public void run(int km) { //인스턴스 메서드
System.out.println(color+"색 자동차가 시속 " + km + "km로 달려요~");
}
public static String info() { //클래스 메서드
String str = "---자동차 정보---\n";
str+="용량: " + capacity + "cc\n"; //static - static field 접근 가능
// str+="색상: " + color + "색\n"; //static - non-static field 접근 불가
return str;
}
}
package day06;
public class MyDemo2 {
String str1 = "나는 인스턴스 변수";
static String str2 = "나는 클래스 변수";
public static void main(String[] args) {
//static과 non-static
MyDemo2 mydemo = new MyDemo2(); //객체 생성
System.out.println(mydemo.str1); //'객체명.' 식으로 접근
//static과 static
System.out.println(MyDemo2.str2); //'클래스명.' 식으로 접근
System.out.println(str2); //클래스명 생략 가능
}
}
[총 정리 코드]
package day06;
//MyDemo.java
class Car{
String color; //non-static 인스턴스 멤버 변수
static int capacity; //static 클래스 멤버 변수
public void run(int km){ //non-static 인스턴스 멤버 메서드
System.out.println(color + "색 자동차가 시속 " + km + "km로 달려요~");
}
public static String info(){
String str = "---자동차 정보---\n";
// str += "색상: " + color + "\n"; //[x] static메서드는 static만 사용할 수 있음
str += "용량: " + capacity + "cc\n"; //static
return str;
}
}
public class MyDemo {
public static void main(String[] args) {
Car car1 = new Car();
//Car클래스의 color변수값(non-static) 출력
car1.color = "red"; //non-static
System.out.println("car1.color: " + car1.color);
//Car클래스의 capacity변수값(static) 출력
Car.capacity = 1000; //static
System.out.println("Car.capacity: " + Car.capacity);
//Car클래스의 run메서드(non-static) 출력
car1.run(100); //non-static
//Car클래스의 info메서드(static) 출력
String result = Car.info(); //static
System.out.println(result);
}
}