1. 클래스
정의
클래스란 사물을 객체화시키는 프로그램 작성 방법이다.
객체(Object)란 프로그램의 대상이 될 수 있는 현실세상에 있는 모든 것을 말한다.
사물 ---------- 객체화 ---------- > 클래스
현실 세계의 객체(Object / ex)자동차...)의 속성(statement)과 동작(behavior)을 추려내어 소프트웨어 객체의 필드(field)와 메소드(method)로 정의하여 코드로 표현한 것이라고 할 수 있다.
클래스는 사용자 정의 자료형이기 때문에, 원하는 자료형을 내 마음대로 구성할 수 있다.
선언 형식
클래스를 구성하는 멤버로는 필드(Field)와 생성자(Constructor),메소드(Method)가 있다.
public class ClassName {
//필드 field : 객체의 데이터가 저장되는 곳
//클래스의 객체(instance) 상태(state)를 저장할 때 사용한다.
int fieldName;
//생성자 constructor : 객체 생성 시 초기화 역할 담당
ClassName (매개변수) {
//객체의 초기화 코드
}
//메소드 method : 객체의 동작에 해당하는 실행 블록
//클래스의 기능(behavior)를 구현할 때 사용한다.
publicvoid methodName () {
}
}
특징
클래스 이름은 식별자 작성 규칙을 따라야하며, 첫 글자를 대문자로 작성한다.
물리적 파일명(.java)와 같은 이름을 가진클래스가 존재해야 하고, 이 클래스 선언에만 public 접근지정자가 붙어야 한다.
클래스의 범위는 { } (중괄호)로 정해진다.
클래스는 필드(field / 멤버변수라고도 한다)와 메소드(method / 생성자, 일반, getter, setter)로 구성되며, 내부에 멤버를 자유롭게 구성할 수 있다.
필드는 클래스의 객체 상태를 저장할 때 사용한다.
메소드는 클래스의 기능을 구현할 때 사용한다. 객체 간의 데이터 전달의 수단으로 사용된다. 메소드는 외부로부터 매개값을 받을 수도 있고, 실행 후 어떤 값을 리턴(결과 값 반환)할 수도 있다. 메소드를 호출함으로써 클래스 내 필드(값)을 조작할 수 있다.
생성자는 클래스를 초기화하기 위해 사용한다. 특별히 생성자를 적지 않아도 자동으로 기본 생성자를 호출한다.
클래스에 접근지정자(접근제어자->p256참고)는 주로 public 를 사용하거나, 생략한다.파일 이름과 동일한 이름의 클래스에만 public 접근 제한자를 붙일 수 있다. public를 사용하는 경우는 독립적인 물리적 저장이 가능한 상태이고, 외부에서 해당 클래스를 접근할 수 있다는 의미이다. 생략하는 경우는 독립적인 물리적 저장은 가능하지만, 외부(타 패키지)에서 접근이 제한된다.
선언된 클래스는 메모리 적재가 되어야 활동이 가능하다.
-> new 연산자로 클래스에 대한 객체(instance) 생성이 가능
멤버 구성이 전혀 없어도 기본 제공되는 멤버가 있다. (Object 클래스 상속에 의한 공유 멤버 제공 /p457 Object클래스, p288 상속개념 참고)
클래스는 서로독립적인 상태이므로 필요시 다른 클래스의 객체를 생성해서 사용할 수 있다.(동일한 클래스를 이용해서 여러개의 객체 생성 가능 ㅡ blueprint(설계도) 특성)
클래스의 객체가생성된 후에는 해당 클래스의 접근 가능한 멤버를 사용할 수 있다.
-실행 클래스 : main() 메소드가 포함된 클래스
-라이브러리 클래스 : main() 메소드가 포함되지 않은 클래스. 단독 실행이 불가능하다.
-JAVA에서 기본 제공하는 클래스의 물리적 모음(라이브러리)을 API(Application Program Interface)라고한다.
-다른 패키지 내에 있는 클래스의 멤버 접근 방법
1)**import 구문 사용 (단축키 : ctrl+shift+O)
2)패키지명.클래스명 형태로 작성 (예: com.test.Sample)
-접근제한자
-public키워드가 없는 클래스 : 같은 패키지 내라면 접근이 가능!
-public 키워드가 있는 클래스 : 다른 패키지에서도 접근 가능
2. 필드
필드(field)란 클래스의 구성멤버 중 하나로, 객체(instance)의 상태 정보가 저장되는 곳이다.
객체 모델링에서 객체(Object)의 state를 field로 표현한다.
형식
-[접근제한자] 자료형 변수명;
-[접근제한자] 자료형 변수명 = 초기값;
-접근 제한자는 private 권장
-필드는 Global 변수로써, 메소드 블록 내부에서 선언된 Local 변수와 구분된다.
예시) 자동차 객체의 필드
고유데이터) 제작회사, 모델, 색깔, 최고 속도
상태) 현재 속도, 엔진 회전수
//자동차 클래스
public classCar {
//<필드(field)> -Global Variables
//->자동차의 state 분석 -> 모델명, 회사, 색상, ...
//Car 객체(instance)의상태가 고정된 상태
//->private 접근 제한자 생략된 상태 (p189 캡슐화 참고)-> 외부 직접 접근 가능
String model = "그랜저";
String company = "현대자동차";
String color = "검정";
public void method() {
//<Local Variables 로컬 변수>
//->메소드(블럭) 내부에서 선언된 변수
//->메소드 실행이 끝나면 활동 불가
//->메소드(블럭) 영역을 벗어나면 활동 불가
//->주의!) 글로벌 변수와 로컬 변수가 동일한 식별자인 경우 로컬 변수를 우선한다.(영역이 작은 쪽을 우선)
//-> 변수명이 다르면 해결. 같을 경우 글로벌 변수에 this 키워드 사용.
//-> 자동 초기화 X
int a = 0; // 명시적 초기화 필요
System.out.println(this.a); //this-> 글로벌 변수
}
}
글로벌 변수(필드)와 로컬 변수의 차이점?
필드는 클래스 내부에서 선언된 변수로, 클래스 내부 영역 전체에서 사용이 가능하며 객체(instance)가메모리에 활동하는 동안 사용하다. 자동초기화가 지원되고 접근 제한자도 사용할 수 있다.
로컬 변수(Local Variable)는 메소드(블록) 내부에서 선언된 변수로, 메소드 실행이 끝나거나 메소드 블록영역을 벗어나면 활동이 불가한 변수이다.
! 주의 ) 글로벌 변수와 로컬 변수가 동일한 식별자인 경우 로컬 변수를 우선한다. (변수명을 다르게 설정해주자) 같을 경우 글로벌 변수에 this 키워드를 사용한다.
자동초기화가 지원되지 않아 명시적 초기화가 필요하다.
필드 초기화 방법 네가지 (->p206 추가 참고 : p265. Getter/Setter 메소드)
자동 초기화
String color; //자동초기화 값 : null
int age; //자동초기화 값 : 0
명시적 초기화
String company = "현대자동차";
----추가 참고----
p31. p192. 식별자 작성 규칙
클래스의 접근 제한 (->p257 ~264p)
캡슐화 개념(p189 참고) -> 방법 : 접근 제한자 사용
// 추가 참고한 책 : <이것이 자바다> 1권
'Java > 노트' 카테고리의 다른 글
[Java] 생성자(Constructor)에 대해서 (0) | 2018.07.13 |
---|