package com.test.oop;
//여기서 class AA 안에 있는 것은 다른 class 에 영향을 줄 수 없음. 캡슐 안에 들어있어. 캡슐화.
class AA {
int a = 1;
int b = 2;
void aa(){ //return 할 데이터가 없을 때 void 쓰고 바로 method 작성.
System.out.println("a = " + a + " / b = " +b);
}
}
class BB {
private int a = 3; //이름이 같아도 다른 class 이기 때문에 괜찮음.
int b = 4;
static final int q = 100; //final 을 붙이면 기존 멤버변수가 상수가 됨.
void bb(){
System.out.println("a = " + a + " / b = " + b);
}
public int getA(){ //이렇게 해서 private 인 a를 가져올 수 있음. return 되는 타입을 메소드인 getA() 앞에 적어둬야 함. void 는 return 되는 것이 없어서 안적은 것.
return this.a;
}
public void setA(int a){
this.a = a; //this.a는 클래스 내의 인스턴스 변수 a를 가르킴.
}
}
class CC{
static int c = 33; //class AA 와는 달리, static 을 앞에 붙이니, 여러개의 인스턴스를 생성시키더라도 static type 으로 선정된 멤버 변수는 여러 인스턴스에서도 동일한 메모리 공간을 차지함.
int d = 60;
final int k = 4; //상수. 고정된 값으로 다른 데에서 k 를 5처럼 다른 값으로 바꿀 수 없음.
void cc(){
System.out.println("C = "+c + d);
}
}
class DD{
static int d = 88;
static void dd(){ //static 을 method 인 void 앞에 적어주면, 이 method 에 사용되는 변수도 static 이 붙어야 함. 왜냐면 static 이 먼저 JVM 이 읽기 때문. 그럼 static 으로 안붙은 int 는 안올라가니까 그 static method 가 안돼.
System.out.println("d = "+d);
}
}
public class Exam01 { //여러개의 class 가 있을 때, 파일명의 class 앞에 public 이 붙어야 함.
public static void main(String[] args){ //main 앞에 static 이 붙어야 하는 이유 > JVM 이 읽기 시작할 때, static 이 붙은 method 들이 main method 와 같이 가장 먼저 올라옴.
//static 이 붙으면 중요한 애니까 main method 와 같이 함께 메모리에 주소가 다 고정됨.
AA aa1 = new AA(); //인스턴스화 : 클래스 AA 를 실제 실행에서 작동될 수 있도록 하는 것. AA 클래스를 aa1 이라는 인스턴스로 만들라고 시키는구나. 만들어야 겠네?!
//프로세스가 작동을 할 떄, aa1이라는 인스턴스를 만들어야 겠구나, + AA() 는 AA 클레스의 형태를 가져와서 어떠한 메모리 공간에 aa1 이란 이름을 가진 인스턴스 객체를 생성시킴.
AA aa2 = new AA(); //같은 클래스에서 왔지만, aa1과 전혀 다른 메모리 공간을 가짐. aa1과 관여 없음. 별도로 작동.
//이렇게 하는 이유가 뭐야? 협업을 위해. 코드 중복 최소화를 위해. 공동모드. 예를 들어 쇼핑몰 만든다고 할 때 같은거 계속 반복해야 하잖아. 코드 중복 엄청나지잖아.
aa1.aa();
aa1.a = 10;
aa1.b = 20;
aa1.aa(); //여기선 a = 10, b = 20
aa2.aa(); //aa1 과 간섭을 받지 않아서 원래대로, a=1, b=2
BB obj2 = new BB(); //생성자에 의한 초기화 , 여기서 생성자는 BB() 이거임.
obj2.bb();
obj2.setA(1001);
//obj2.a 는 가져올 수 없음. a 는 private 이기 때문. 가져오려면 getA() 같은 메소드를 직접 만들어야 함.
System.out.println(obj2.getA());
CC cc1 = new CC();
CC cc2 = new CC();
cc1.cc();
cc2.cc();
cc1.c = 44; // c는 cc1 과 cc2 모두에 바뀜. 왜냐하면 static int 이기 때문.
cc1.d = 50; // d는 cc1 에서만 바뀜 일반 int 이기 때문.
cc1.cc();
cc2.cc();
DD.dd(); //지금까지는 꼭 인스턴스 규칙에 의해서 앞에서 인스턴스화를 시켰어야 했음. 그런데 static method 가 생기니까 그냥 적어도 에러가 안남.
//method 에 static 붙이면 인스턴스 객체를 안만들어도 됨.
}
}
'Computer Science' 카테고리의 다른 글
[JAVA] 무작위의 integer array 순서대로 정렬하기! Bubble Sorting (1) | 2024.08.29 |
---|---|
[백준 10952번] A+B - 5 - JAVA code 풀이 (0) | 2024.08.29 |
[JAVA] 반복문 사용해서 1부터 100까지의 합 구하기 5가지 방법 (0) | 2024.08.29 |
[JAVA] 인스턴스 변수와 클래스 변수 -> 코드 상으로 확인해보자! (1) | 2024.08.28 |
[백준 25304번] 영수증 - Java code 풀이 (0) | 2024.08.22 |