Static 에 관한 사용방법임.
ㅁ. 보통 static변수를 정적변수라고 많이 말하는데 공유메모리(공유변수)라고 생각하면 편리하다.
객체가 만들어지고 메모리나 변수가 생기는것이 아니라 객체와 무관하게 가져다 사용한다고 생각하면 된다.
(※ 코드는 이전 코드참고)
00. 'Car'클래스에 'static'으로 접근권한을 주고 'count'변수를 하나 만들자.
01. 메인클래스에서 'taxi', 'bus', 'truck' 객체를 만들고 각각 객체의 count를 재정의 해서 taxi.count를 출력해보면 30으로 출력되는 것을 확인할 수 있다.
앞서 말했듯이, 객체마다 있는 변수가 아니라 하나의 메모리에 저장이 되기때문에 가장 마지막에 재정의된 값으로 출력해준 것이다.
02. 바람직한 Static변수 사용방법은 객체를 만들어서 각각하기보다는 클래스 자체에 변수를 재정의 시키는 것이다.
ㅁ. static method
특징1 : 객체를 만들지 않고, 단발성(일회성)으로 실행할 때 사용하는 메소드이다.
특징2 : static method 는 static method 만 호출 할 수 있다.
00. 또한, 메인클래스에 result = add(1,2); 로 해서 3을 출력하고 싶어서 메인클래스 밖에다 새롭게 메소드를 만들면 실행이 되지 않는다. 그 이유는, 기본으로 제공되는 메인클래스가 public static void main[]~ 으로 시작하기 때문이다.
※. 코드
class Car{
private String color; // 원칙적으로 변수는 private
private int speed;
static int count;
public String getColor()
{
return color;
}
public void setColor(String color) // return type이 필요없는경우 void // default 값으로 String c를 color에 셋팅해라.
{
this.color =color; // this 는 자기 자신을 나타내는 객체(여기서는 제일위에 선언된 color)
}
private void printError()
{
System.out.println("Error while Processing");
}
public void setSpeed(int speed) // setter가 없으면 다른 사람들이 값을 setting 할 수 없으므로 제공해줘야함.
{
if(speed <0)
{
printError();
speed = 0;
}
this.speed = speed; // = set 한 speed 값을 우리가 처음 선언한 speed 값으로 재정의해라.
}
public void setSpeed(double speed)
{
this.speed = (int)speed; //34.5를 집어넣으면 34로 강제 캐스팅하는 효과.
}
/* 생성자(Constructor) - 초기화 메소드 */
//
// 특징1 : 리턴타입이 없다.
// 특징2 : 클래스 이름과 동일하다.
// 특징3 : 초기화를 수행할 때 사용한다.
// 특징4 : 생성자가 없으면, 시스템이 알아서 만들어준다.
// 특징5 : 생성자가 하나라도 있으면, 프로그래머의 의지를 반영한다. -> 없는 생성자는 메인클래스에서 사용할 수 없다.
//
public Car() // 리턴타입이 없으니 Car에 String 등을 안써줘도된다.
{
this("GRAY", 0); // 생성자를 호출 할 수 있다. / 첫번째 순서로 위치시켜줘야만 한다.
System.out.println("Car()");
//this.color = "GRAY"; // Car()로 객체생성시 기본 컬러와 스피드를 GRAY와 0 으로 자동 Setting한다.
//this.speed = 0;
}
public Car(String color) // 객체생성시 Car bus = new Car("Pink"); 로 하면 이 메소드가 작동한다.
{
System.out.println("Car(String)");
this.color = color;
this.speed = 0;
}
public Car(String color, int speed)
{
System.out.println("Car(String, int)");
this.color = color;
this.speed = speed;
}
public int getSpeed()
{
return speed;
}
public String toString()
{
return "(speed, color) = (" + speed + "," + color + ")";
}
}// Car Class
public class Test {
public static void main(String[] args) {
Car taxi = new Car();
Car bus = new Car("Pink"); // PINK, 0 이 나와야한다.
System.out.println(bus);
Car truck = new Car("Green", 66);
System.out.println(truck);
taxi.setSpeed(-20); //taxi.speed = 50; 대신에 setter를 이용해서 사용
int taxiSpeed =taxi.getSpeed();
taxi.setSpeed(77); //taxi.speed = 50; 대신에 setter를 이용해서 사용
int taxiSpeed2 =taxi.getSpeed();
taxi.setSpeed(-101); // 파라미터가 int 타입으로 셋팅
taxi.setSpeed(34.5); // 파라미터가 double 타입으로 셋팅
taxi.setColor("BLACK");
System.out.println(taxiSpeed);
System.out.println(taxiSpeed2);
System.out.println(taxi.getSpeed());
System.out.println(taxi.getColor());
taxi.count = 10;
bus.count = 20;
truck.count = 30;
System.out.println("taxi.count= " + taxi.count);
/* 바람직한 static 변수를 사용하는 방법 */
//
// static 변수는 공유메모리(shared memory)
// static method : 대표적으로 main(){}
// 특징1 : 객체를 만들지 않고, 단발성(휘발성)으로 실행할 때 사용하는 메소드이다.
// 특징2 : static method 는 static method 만 호출할 수 있다.
//
Car.count = 40; //Car라는 클래스에서 공통으로 count를 사용한다.
System.out.println("Car.count= " + Car.count);
int result = add(1,2);
System.out.println(result);
}// main
static int add(int a, int b) // static 이 아니면 main클래스에서 사용 할 수 없다. 따라서 앞에 static을 사용해줘야한다.
{
return a + b ;
}
}// Class