public class와 class

1개의 파일에 여러 클래스를 구성할 수 있다.

이때 public 속성은 하나의 클래스만 가져야 하고, public 속성을 가지는 클래스는 파일명과 동일해야 한다.

//파일명: MyDemo.java
package day06;

public class Car{ //컴파일 에러 → class Car로 수정해야 함

}
public class MyDemo {
}

컴파일 에러

public class Car가 되려면 파일명이 Car.java여야 한다.

 


static

멤버 변수(필드)의 종류

  1. 인스턴스 변수(non-static)
    - static이 붙지 않은 멤버 변수는 인스턴스를 생성해야 사용할 수 있고, 인스턴스에 소속되어 있다.
    - 인스턴스 변수는 인스턴스를 만들 때마다 새로 만들어진다.
    - non-static은 객체를 생성한 뒤 '객체명.' 식으로 접근해야 한다.
  2. 클래스 변수(static)
    - static이 붙은 멤버 변수는 클래스에 바로 접근해서 사용할 수 있고, 클래스 자체에 소속되어 있다.
    - 보통 여러 곳에서 공유하는 목적으로 사용된다.
    - static은 '클래스명.' 식으로 접근해야 한다.
class Car{
    String color; //인스턴스 변수
    static int capacity; //클래스 변수
}

 

 

멤버 메서드의 종류

  1. 인스턴스 메서드(non-static)
    - static이 붙지 않은 멤버 메서드는 인스턴스를 생성해야 사용할 수 있고, 인스턴스에 소속되어 있다.
    - 인스턴스 메서드는 인스턴스를 만들 때마다 새로 만들어진다.
    - non-static은 객체를 생성한 뒤 '객체명.' 식으로 접근해야 한다.
  2. 클래스 메서드(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);
    }
}

실행 결과

 

+ Recent posts