CHAPTER 08. 클래스와 객체 알아가기
6 ) Class & Instance
6-1 ) 클래스 생성하기
- 클래스를 사용하기 위해서는 클래스를 생성해야 함
- new 예약어를 이용하여 클래스 생성
- 클래스형 변수 이름 : new 생성자; >>> Ex) Student studentA = new student();
7 ) 인스턴스와 힙(heap) 메모리
- 하나의 클래스 코드로부터 여러 개의 인스턴스를 생성
- 인스턴스는 힙(heap) 메모리에 생성됨
- 각각의 인스턴스는 다른 메모리에 다른 값을 가짐
8 ) 용어 정리
- 객체 : 객체 지향 프로그램의 대상, 생성된 인스턴스
- class : 객체를 프로그래밍하기 위해 코드를 만든 상태
- Instance : class가 메모리에 생성된 상태
- Member variable : class의 속성, 특성
- Method : member variable을 이용하여 class의 기능을 구현
- 참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수
- 참조 값 : 생성된 Instance의 메모리 주소 값
9 ) 생성자(Constructor)
인스턴스 생성 시 new 키워드와 함께 사용했던 생성자
9-1 ) Constructor 기본 문법
- 생성자는 Instance를 초기화할 때의 명령어 집합
- 생성자의 이름은 그 class의 이름과 같음
- 생성자는 Method가 아님, 상속되지 않으며, retorn 값은 없음.
10 ) 디볼트 생성자 ( Default Constructor )
- 하나의 class에는 반드시 적어도 하나 이상의 constructor가 존재
- 프로그래머가 constructor를 기술하지 않으면 default constructor가 자동으로 생김( 컴파일러가 코드에 넣어줌 )
- Default Constructor는 매개 변수가 없음
- Default Constructor는 구현부가 없음
tip. 만약 class에 매개변수가 있는 생성자를 추가하면 Default Constructor는 제공되지 않음.
11 ) 생성자 오버로드 ( Constructor Overload )
- 필요에 의해 Constructor 추가하는 경우 여러 개의 Constructor가 하나의 class에 있음( Overload )
12 ) 참조 자료형 ( Reference daty type )
- 변수의 자료형
- 기본 자료형 : int, long , float , double 등
- 참조 자료형 : String, Date, Student 등 ( class 형 )
13 ) 정보 은닉 ( Information hiding )
- private 접근 제어자
- 클래스의 외부에서 클래스 내부의 멤버 변수나 메서드에 접근(access) 하지 못하게 하는 경우 사용.
- 멤버 변수나 메서드를 외부에서 사용하지 못하도록 하여 오류를 줄일 수 있음
- 변수에 대해서는 필요한 경우 get(), set() 메서드를 제공
14 ) Static 변수
Static 변수는 Instance가 생성될 때마다 다른 메모리를 가지는 것이 아니라 프로그램이 메모리에 적재(load)될 때 데이터 영역의 메모리에 생성된다. 따라서 Instance 생성과 관계없이 클래스 이름으로 직접 참조하고, Class 변수라고도 함.
[ static 예약어 ] [ 자료형 ] [ 변수 이름 ]
| | |
static int serialNum >> static int serialNum;
14 -1 ) Static 변수 예시
여러 Instance가 하나의 메모리 값을 공유할 때 필요
학생이 생성될 때마다 학번이 증가해야 하는 경우
기준이 되는 값은 Static 변수로 생성하여 유지함.
각 학생이 생성될 때마다 Static 변수 값을 복사해 와서 하나 증가시킨 값을 생성된 Instance의 학번 변수에 저장해 줌
14-2 ) Static 메서드
-클래스 메서드라고도 한다.
-메서드에 Static 키워드를 사용하여 구현하고, 주로 Static 변수를 위한 기능을 제공한다.
-Static 메서드에서 Instance 변수를 사용할 수 없음
-Static 메서드도 Instance의 생성과 관계없이 클래스 이름으로 직접 메서드 호출.
Ex ) Student.getSerialNum(); // getSerialNum()이 Static Method.
-Instance의 변수의 경우 꼭 Instance가 먼저 생성되어야 하므로 Static Method에서는 생성이 불확실한 Instance 변수를 사용할 수 없음.
15 ) 변수의 유효 범위
변수 유형 | 선언 위치 | 사용 범위 | 메모리 | 생성과 소멸 |
지역변수 (로컬 변수) |
함수 내부에 선언 | 함수 내부에서만 사용 | 스택 | 함수가 호출될 때 생성되고 함수가 끝나면 소멸함 |
멤버 변수 (Instance 변수) |
Class member 변수로 선언 | Class내부에서 사용하고 private이 아니면 참조 변수로 다른 Class에서 사용 가능 | 힙 | Instance가 생설될 때 힙에 생성되고, 가비지 컬렉터가 메모리를 수거할 때 소멸됨 |
Static 변수 (Class 변수) |
Static 예약어를 사용하여 Class내부에 선언 | Class 내부에서 사용하고 private이 아니면 Class 이름으로 다른 Class에서 사용가능 | 데이터 영역 | 프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸됨 |
마치며
클래스와 객체 포스팅을 마무리했습니다. 꼭 알아가야 하는 파트라서 나눠서 포스팅을 해보았습니다. 다음 포스팅 배열에서 뵙겠습니다.
'[ JAVA ] > JAVA' 카테고리의 다른 글
[ Java ] 배열 ( ArrayList ) (0) | 2022.12.13 |
---|---|
[ Java ] 배열 (0) | 2022.12.04 |
[ Java ] 클래스와 객체1 (0) | 2022.11.25 |
[ Java ] Method (0) | 2022.11.23 |
[ Java ] 반복문 (2) | 2022.11.22 |