17. 클래스와 방법론
클래스의 변수와 방법론을 알아가자.
17. 클래스와 방법론
클래스 정의와 방법론
- 방법론 : 클래스를 정의하는 기법들에 대한 조언
GRASP 방법론
- Information Expert
- LowCoupling
- High Cohesion
- Creator
- Controller
SOLID
- SRP(single Responsibility Principle)
- OCP(Open/Closed Principle)
- LSP(Liskov Substitution Principle)
- ISP(Interface Segregation Principle)
- DIP(Dependency Inversion Principle)
이 두가지 모두를 Design Patterns라고 함
변수 초기화
1
2
3
4
5
6
Class A{
static int v1;
void m1(){
Board b = new Board();
}
}
- Method Area : A클래스가 메모리에 로딩될 때 자동 생성됨, 타입에 맞춰서 자동 초기화 (v1 → 0)
- JVM Stack : 메서드가 호출될 때 생성됨, 변수를 초기화시키지 않음. 즉, 변수의 값을 사용하기 전에 반드시 직접 초기화 시켜야함 (b = new Board)
Heap : new 명령 실행 시 생성 타입에 맞춰 자동 초기화 됨. (new Board → [title → null content → null ])
클래스 선언 위치
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Test03 {
// nested class(중첩 클래스)
class B { - } // non-static nested class
static class C { - } // static nested class
Object obj1 = new Object() {}; // anonymous class
void m1() {
class D { - } // local class
Object obj2 = new Object() {}; // anonymous class
}
void m2(){ /* m1 메서드 안에 있는 class는 사용 불가함 */ }
}
// package member class
class A { - }
- A : package member class(= top level class)
- B : non class → non-static nested class(= inner class)
- C : static class → static nested class
- D : nested class (= local class)
중첩 클래스와 .class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Test03 { // -------------| Test01.class : 중첩 클래스를 포함하지 않음
// nested class
class B { - } //--------------------| Test03$B.class
static class C { - } //-------------| Test03$C.class
Object obj1 = new Object() {}; //---| Test03$1.class : 이름이 없어 번호를 임의 부여
void m1() {
class D { - } //------------------| Test03$1D.class : 1 = local 클래스임을 표시
Object obj2 = new Object() {}; //-| Test03$2.class
}
}
class A { - } //----------------------| A.class
변수 선언과 변수
static int sqeNo, String name, User obj = 변수를 생성시키는 명령문(= 변수 선언), 변수는 메모리일 뿐임 → Method area에 올라감
new User, new ~ = 인스턴스 변수 선언을 실행(= 인스턴스를 생성함)시키는 명령문 → 실행 시 Heap에 올라감
void main, m( ); = 메서드 실행 → 메서드는 실행 시 JVM Stack에 올라감, main은 시작과 동시에 실행되어 올라간다.
자바의 클래스 계층도와 레퍼런스
vehicle - capacity ————————————— super 클래스(부모 클래스) bicycle - chain ——————————————— sub 클래스(자식 클래스) motorCycle - engine, cc ——— sub 클래스(자식 클래스)
- Car - engine, cc, airbag
- truck - weight, isDump
1
2
3
4
5
6
7
8
9
10
11
Motorcle m = new MotorCycle();
m.engine = ~;
m.cc = ~;
m.chai = ~; //bicycle의 자식 클래스이기 때문에 사용 가능함
m.capacity = ~; //상동
Bicycle bi = new MotorCycle(); // 상위 클래스의 레퍼런스는 하위 클래스의 인스턴스를 담을 수 있다.
bi.chain() = ~;
bi.capacity = ~;
Vehicl ve = new MotorCycle(); // 상동
- 상위 분류명으로 하위 분류 객체를 가리킬 수 있다.
캡슐화(encapculation)
데이터와 데이터 처리하는 메서드를 하나의 클래스로 묶는데 이를 캡슐화라고한다.
데이터를 은닉 시켜 데이터 무결성을 유지하고 복잡한 로직을 감추면서 가독성과 유지보수성이 높아진다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.