Class
자료와 자료를 처리하는 기능이 모여있는 사용자 정의형 데이터 타입
* Class = Data + Method
Data : 프로그램에서 유지, 관리해야할 데이터, Attribute라고도 함
Method : Data를 조작하는 함수.
Static
- Memory에 할당을 전역영역에 하기 위한 Keyword.
전역영역 할당의 의미
- 전역 접근이 가능해 Application이 종료할 때 까지 존재.
- Heap, Stack Memory 영역과 관련이 없음.
- 접근할 때 Class명 만을 이용.
Class Variable
- Static을 이용하여 선언된 Attribute
- 전역영역에 위치
- Class의 instance와 전혀 상관이 없음.
- 접근시 Class명 이용.
Class Method
- Static으로 선언한 Method
- 전역 영역에 위치
- Class의 instance와 전혀 상관이 없음.
- 접근시 class명을 이용.
- this가 존재하지 않음.
Instance
Class가 메모리에 적재되어 구조화된 MemoryBlock.
Object라고도 불림.
Instances는 모든 OOP가 동일한 방식으로 만드는 것은 아니나 일반적으로 유사성이 있음.
Constructor
Class를 메모리에 적재할 때 이를 초기화 하기 위한 특별한 Method
Constructor는 Class와 이름이 같으나 ReturnType 이 없다.
특징
- 명시적으로 작성을 하지 않을 경우 Java Compiler가 Basic Constructor를 추가함.
- 일반적으로 Overloading된 Constructor만 있는 경우 Basic Constructor를 넣지 않기 때문에 Basic Constructor를 반드시 작성해야함.
this
Instance 자기 자신에 대한 Reference Value
Method는 Parameter로 this를 받는다. (생략되어 보이지 않음)
this는 instance와 method를 binding하는 역할을 수행한다.
Package
Java Class를 분류하여 찾기 쉽게 하고 충돌을 방지하기 위해 사용하는 기법 Name-Space
Package는 Filesystem에서 directory로 구현한다.
Source Code에서는 Import keyword를 통해 접근한다.
구조
- com.base.linearfunction 이라고 Package를 만들 경우
- src/com/base/linearfunction/ 과 같이 동일한 directory 구조가 생성.
- 일반적으로 하나의 package에 여러개의 class가 존재함으로 package keyword를 이용하여 묶어줌.
import
- import keyword를 사용하여 접근
- ex) import com.mypack.A;
- ex) import com.mypack.*;
Information Hiding
Class의 Data나 기능을 숨기거나 공개하는 OOP의 특성.
Information Hiding의 필요성
- Security : 공개를 하지 않아야 할 Data의 보호.
- Usability : 공개한 Data나 기능들만 사용.
- Consitency : 정해진 방식으로만 Data를 접근.
- Scalability : Class의 확장시 information hiding을 기반으로 확장. (Inheritance Mechanism)
Access-Level Modifier
지시자 | 개념 | 동일 Package | Out of Package |
Private | 비공개 | X | X |
Public | 공개 | O | O |
Protected | Inheritance시 공개 | O | X |
Default | 동일 패키지 공개, 생략으로 표현 | O | X |
Encapsulation
관련이 있는 Data와 Method를 묶어 Class를 조직하는 OOP의 특성.
유의사항
- 단일 목정성 : 하나의 역할을 수행하도록 Class를 조직.
- 유지보수성 : 유지 보수시 분석 및 변경을 쉽게 하도록 구현
- Information hiding과 같이 이루어짐.
'JAVA' 카테고리의 다른 글
[Java] printf() 출력 (0) | 2022.06.05 |
---|---|
[Java] VSC JAVA 개발 환경 구축 (0) | 2022.06.03 |
[Java] Overloading, String, StringBuilder (0) | 2022.06.02 |
[Java] Stack 구현 (0) | 2022.05.31 |
[Java] Comment(주석), 클래스(class), 생성자, 정보은닉 (0) | 2022.05.31 |