<<<<<<<<<<<<자바진영의 Bean 클래스 API>>>>>>>>>>>
개발자가 자바 language를 이용할 때 필요한 기능이 있을때마다 모델링해야한다면 불편하고 번거로워서 자바를 사용하지 않을 것이다.
그래서 자바 진영에서 개발에 필요한 기능을 모델링 해 클래스를 만들어놨다. 우리가 일반적으로 사용하는 문자열 String클래스, Scanner 클래스 등이 그렇다.
자바 개발시 가장 위에 import java.lang.*; 이 생략되어있다. 이로 인해 스트링 클래스를 사용할 때에는 별도의 import가 필요가 없다.
Scanner클래스를 이용할 때에는 import java.util.Scanner;를 클래스 이름 위에 적었었다. 이는 기본 클래스 패스인 java_home\jre\lib\rt.jar 밑에 java 패키지 밑에 util 패키지에 있는 Scanner클래스를 import 하겠다는 의미이다.
((패키지는 이 클래스가 어디에 저장되어있는지를 보여준다. 패키지와 클래스의 저장위치가 다르면 실행되지 않는다.
IDE없이 패키지를 사용할 때에는 콘솔창에서 javac -d . 파일이름.java 를 입력해야 한다.
-d는 패키지 이름을 적어놓은대로 현재폴더에 폴더를 새로 만들고 그 안에 클래스 파일을 저장해준다.
패키지와 import 키워드는 객체지향 개념은 포함되어 있지 않다. 사용법에 불과하다. 또한 패키지 네이밍 룰은 "회사 도메인을 거꾸로 한다", 그리고 전부 소문자로 적는다 이다.
패키지는 실질적으로 자바의 문법을 따르기보단 OS의 문법을 따른다. 윈도우는 대소문자 구분을 안하기 떄문에 CamelCase로 적어도 소용이 없다.
자바는 오픈소스이기 때문에 String.java 파일을 이용해 String 클래스가 어떻게 생겼는지 확인할 수 있다. 기본 클래스 패스인 rt.jar에 들어가면 java 패키지 밑에 lang 패키지가 있다. 소스를 직접 보기는 어려워서 자바진영에서 사용법 API를 만들었다.
jdk documentation file을 다운받으면 api 폴더(패키지)가 있다. 그 속에 있는 index.html 이 있다. 이걸 열면 자바 API로 연결된다. 패키지들(java.util 혹은 java.lang 외의 여러 패키지)과 그 속에 포함된 class 들을 확인할 수 있으며 해당 class안의 필드, 컨스트럭터, 메서드 모두 사용법을 확인할 수 있다.
jdk documentation file의 home에 있는 index.html은 자바플랫폼에 대한 구조가 나온다.
JDK, JRE, JVM의 구조를 보여준다.
현재 파악 가능한 자바 플랫폼의 구조는 자바language를 사용하기 위해서 개발환경이 필요함을 보여준다.
그리고 자바 홈의 bin폴더 안에 있는 exe파일들이 tool들?이라는 것,
JVM에 API를 더한 것이 JRE라는 구조 정도이다.
이렇게 자바 API를 만드는 것은 java doc주석을 사용한다.
java doc는 자바에만 있는 주석문으로 /** 주석문 */ 와 같이 사용하는데, 이 방법으로 주석문을 만들 경우에는 HTML문서화 된다.
rt.jar안에 있는 .java 파일들을 보면 설명이 해당 java doc 주석문으로 처리되어있음을 볼 수 있다.
<<<<<<<<<<<<Access Modifier 접근제어자 >>>>>>>>>>>>>
Access Modifier에는 public, protecte, ( )아무것도적지않음, private이 있다.
Class는 Access Modifier를 public과 ( )만 사용할 수 있고, 필드나 메서드에는 위의 네 Access Modifier 모두 사용 가능하다.
public은 모든 사용자에게 오픈하고, protected는 같은 패키지라는 신뢰성이 있을 때 혹은 상속관계에 있을 때 접근 가능하고, ( )얘의 이름은 default access modifier 혹은 friendly access modifier라고 한다 는 같은 패키지일때에만 접근이 가능하다.
private는 자신만 가지고 있을 수 있다.
Access Modifier를 사용하는 이유는 객체지향의 특징 중 Encapsulation을 구현하기 위함이다.
클래스에는 public Access Modifier를 주로 사용하는데 접근에 제한이 있는 class는 사용 시 효율적이지 않기 때문이다. 따라서 Encapsulation을 구현할 때에 class는 public으로 그 속의 내용을 private 등으로 감춘다.
real world에서 friendly access modifier의 예시를 들자면 월급을 들 수 있다. 내가 월급을 얼마 받는지 부모님께는 공유하지 않는다. 그러나 나와 같은 패키지에 있는 우리 회사 월급담당자는 알고 있다.
<<<<<<<<<<<<<<<<<static / instance>>>>>>>>>>>>>>>>>
용어정리
static: instance를 생성하지 않고 해당 필드 혹은 메서드로 접근할 수 있다. 접근할 때에는 class 이름과 . 오퍼레이터를 사용한다.
instance: instance를 생성해야 접근이 가능하다. 접근할 때에는 인스턴스(혹은 참조값을 가지고 있는 변수 이름)와 . 오퍼레이터를 사용한다.
static변수는 class변수라고도 한다. class로 접근하기 때문이다.
필드(field), 멤버변수, 상태값, attribute를 같은 의미로 사용하기도 한다.
그러나 멤버변수는 원칙적으론 자바에 없는 말이며, 상태값과 attribute는 추상화캡슐화 모델링 시에 추출하는 객체의 명사적 특성을 가리킨다.
<<<<<<<<<<<<<<<<<is a 관계, has a 관계>>>>>>>>>>>>>>>>>
is a 관계는 클래스 확장시 (공유 시) 맺어지는 관계이다.
class 사람 extends 동물;
이라고 하면 사람 클래스는 동물 클래스를 공유하는 클래스이다.
이 때 사람 is a 동물 관계가 맺어진다.
(공유 관계이면서 is a 관계가 성립하지 않는다면 잘못된 모델링이라고도 할 수 있다)
has a 관계는 클래스 필드 안에 다른 클래스의 instance가 생성된 관계이다. Association 관계라고도 한다.
class 사람{
Heart h = new Heart();
}
라고 하면 사람은 Heart의 인스턴스를 가지고 있는 것이다. 이 때
사람 has a Heart 관계가 성립한다.
'IT > 공부' 카테고리의 다른 글
[프로그래밍] Modifier-static/ final, Access Modifier와 Modifier의 사용법, reference data type 형변환 (0) | 2022.02.02 |
---|---|
[정보처리기사 필기] 도전 시작 (0) | 2022.02.02 |
[프로그래밍] 생성자, 공유, super, this, OverRiding, package (0) | 2019.03.17 |
[프로그래밍] 객체지향, 메서드 문법, OverLoading, getter 메서드 (0) | 2019.03.17 |
[프로그래밍] call by value/reference, 배열, 객체지향 (0) | 2019.03.17 |