static
package ex01.method.method07;
/*
static : 정적 => 메모리에 바로 올린다
모든 메서드는 반드시 Class에 소속되어야 한다.
*메서드의 2가지 종류
1) static 메서드
a) 실행시 main 메서드가 호출되기 전에 메모리에 올라간다.
b) class 소속
2) non-static 메서드 (static 키워드를 안붙이면 됨 )
a) 클래스의 객체를 만들 때 메모리에 올라간다.
b) 객체 소속
Run - main 이름의 메서드를 찾아서 실행한다.
static을 붙이면 시작하자마자 바로 메모리로 올라간다.
jvm이 main을 찾아서 실행을 시작한다.
*/
public class StaticKeyword {
public static void main(String[] args) {
System.out.println(Calc.add(10, 20));
System.out.println(Calc.sub(10, 20));
System.out.println(Calc.mul(10, 20));
System.out.println(Calc.div(10, 20));
}
}
class Calc{
static int add(int a, int b) {
return a+b;
}
static int sub(int a, int b) {
return a-b;
}
static int mul(int a, int b) {
return a*b;
}
static int div(int a, int b) {
return a/b;
}
}
non-static
package ex01.method.method08;
/*
클래스의 변수 => 객체
non-static 메서드는 객체가 생성되어야 메모리에 올라간다.
*/
public class StaticKeyword {
public static void main(String[] args) {
// 클래스의 변수(객체)를 생성한다
// 이때 클래스의 non-static 멤버가 모두 메모리에 올라간다.
Calc calc = new Calc();
System.out.println(calc.add(10, 20));
System.out.println(calc.sub(10, 20));
System.out.println(calc.mul(10, 20));
System.out.println(calc.div(10, 20));
}
}
class Calc{
int add(int a, int b) {
return a+b;
}
int sub(int a, int b) {
return a-b;
}
int mul(int a, int b) {
return a*b;
}
int div(int a, int b) {
return a/b;
}
}
static을 쓰면 편리하지만, 여러개를 표현할 수가 없다. 하나밖에 못 쓴다.
package ex01.method.method09;
public class Staic_NonStatic {
public static void main(String[] args) {
//3년 전에 비트캠프는 서초지점 1개였다.
Bitcamp.inputPlace("서초 비트캠프",350);
Bitcamp.showPlace();
//신촌 비트캠프를 추가하느라 서초 비트캠프 값이 덮여졌다.
Bitcamp.inputPlace("신촌 비트캠프",180);
Bitcamp.showPlace();
}
}
class Bitcamp{
static String placeName;
static int st_num = 0;
static void inputPlace(String name, int num) {
placeName = name;
st_num = num;
}
static void showPlace() {
System.out.println("지점 이름 : " + placeName);
System.out.println("학생수 : " + st_num);
}
}
객체를 만들면 각각의 고유한 값들을 따로따로 담을 수 있다.
package ex01.method.method10;
public class Staic_NonStatic {
public static void main(String[] args) {
// 여러 개 지점의 값을 보유하고 있으려면 static이 아니라
// 일반 객체로 만들어야 한다.
Bitcamp bitSinnonhyun = new Bitcamp();
Bitcamp bitSinchon = new Bitcamp();
Bitcamp bitJongro = new Bitcamp();
Bitcamp bitGangnam = new Bitcamp();
bitSinnonhyun.inputPlace("신논현 비트캠프", 350);
bitSinchon.inputPlace("신촌 비트캠프", 180);
bitJongro.inputPlace("종로 비트캠프", 150);
bitGangnam.inputPlace("강남 비트캠프", 150);
bitSinnonhyun.showPlace();
bitSinchon.showPlace();
bitJongro.showPlace();
bitGangnam.showPlace();
}
}
class Bitcamp{
String placeName;
int st_num = 0;
void inputPlace(String name, int num) {
placeName = name;
st_num = num;
}
void showPlace() {
System.out.println("지점 이름 : " + placeName);
System.out.println("학생수 : " + st_num);
}
}
전체 인원 값을 항상 담고 있는 변수가 있었으면 좋겠다. ==> static을 붙여서 만든다.
package ex01.method.method10;
public class Staic_NonStatic {
/*
전체 객체가 공유하고 싶은 변수는 static으로 만든다. (static은 한개만 생기니까)
1) 모회사인 '비트컴퓨터'를 공유하고 싶다.
2) 전체 지점의 인원수를 공유하고 싶다.
static을 사용하는 2가지 경우
1) 메서드의 기능이 범용적일 때
특별한 기능이라기 보다는 여기저기서 사용될 것 같을 때
객체가 여러개 필요 없을 때
2) 전체 객체가 공유하고 싶을 때
모든 객체가 접근할 수 있다
클래스에서 유일하게 1개만 만들 수 있다
*/
public static void main(String[] args) {
Bitcamp.superCompany = "비트컴퓨터";
Bitcamp bitSinnonhyun = new Bitcamp();
Bitcamp bitSinchon = new Bitcamp();
Bitcamp bitJongro = new Bitcamp();
Bitcamp bitGangnam = new Bitcamp();
bitSinnonhyun.inputPlace("신논현 비트캠프", 350);
bitSinchon.inputPlace("신촌 비트캠프", 180);
bitJongro.inputPlace("종로 비트캠프", 150);
bitGangnam.inputPlace("강남 비트캠프", 150);
bitSinnonhyun.showPlace();
bitSinchon.showPlace();
bitJongro.showPlace();
bitGangnam.showPlace();
bitSinnonhyun.showBitcampInfo();
bitSinchon.showBitcampInfo();
bitJongro.showBitcampInfo();
bitGangnam.showBitcampInfo();
Bitcamp.showBitcampInfo();
}
}
class Bitcamp{
//클래스 소속으로, 클래스에서 단 1개만 생성된다.
static String superCompany; // 모회사
static int all_st_num = 0; // 전체 인원
//객체 소속으로, 객체마다 1개씩 생긴다.
String placeName; //각 지점 이름
int st_num = 0; //각 지점 인원
static void showBitcampInfo() {
System.out.println();
System.out.println("**************************************");
System.out.println("회사명 : " + superCompany + "비트캠프" );
System.out.println("인원수 : " + all_st_num);
System.out.println("**************************************");
System.out.println();
}
// non-static 메서드는 1번째 객체가 생길 때 메모리에 올라가고
// 그 다음 객체부터는 메서드를 공유한다.
void inputPlace(String name, int num) {
placeName = name;
st_num = num;
all_st_num += num;
}
void showPlace() {
System.out.println("지점 이름 : " + placeName);
System.out.println("학생수 : " + st_num);
}
}