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

생성자란?

생성자는 특수한 목적을 가지는 메소드로객체가 생성될  자동으로 호출되어 필드를 초기화하는 역할을 한다.

 

생성자가 필요한 이유

-필드를 선언할  초기값을 주게 되면 동일한 클래스로부터 생성되는 객체들은 모두 같은 데이터를 갖게된다.

->객체 생성 시점부터 원하는 초기값을 설정하기 위해 생성자를 사용한다.

 

생성자 작성 형식

접근제한자 메소드이름 ([매개변수]) {

//실행 코드

}



 

특징

-객체 생성  생성자가 호출되지 않으면 예외(에러) 발생한다.

-없으면 컴파일러에서 기본 생성자를 자동으로 제공

-클래스 이름과 동일하고 반환자료형(return type) 없다void표기 조차도 필요 없음

-일반적으로 접근제한자는 public 사용하나private 생성자를 사용하는 경우도 있다. (->private 생성자)

 

기본 생성자

-사용자가 생성자 선언을 하지 않는 경우에만 자동 제공되는 생성자

-객체 생성  자동 호출되는 메소드이므로기본 생성자가 없으면 컴파일러에서 기본 생성자를 자동으로 제공해준다.

-자동으로 생성되는 기본 생성자의 접근 제한은 클래스의 접근 제한과 동일하다. (p260 참고)


매개변수가 있는 생성자 Parameterized Constructor

-생성자에 매개변수를 쓰는 이유 : 외부 전달 받아서 필드를 초기화하기 위한 목적

->기본 생성자 추가로 명시적 선언이 필요  - 매개변수가 있는 생성자 선언  기본 생성자는 자동 제공되지않으므로 기본 생성자와 함께 쓰는 것을 권장한다.


private 생성자 (p260, p243 참고)

->외부에서 객체(instance) 생성하는 과정을 통제하는 수단.

-private 접근제한자는 동일 패키지이건 다른 패키지이건 상관없이 생성자를 호출하지 못하도록 제한하여클래스 외부에서 new 연산자로 객체를 만들  없다.

-클래스 내부에서 정적(static) 메소드를 사용해 객체 생성  제공하도록  

 예Math 클래스 - Math클래스 메소드는 객체(instance)를 선언하지 않아도 사용이 가능하다.

 Math m = new Math(); 라고 선언해보면 The constructor Math() is not visible이라는 메시지

 ->Math클래스의 생성자의 접근제한자는 private인 것을 알 수 있다.

 

 

[참고]생성자와 setter - 생성자와 setter 역할은 비슷하지만 호출 시점이 다르다.

-생성자는 객체 생성  필드 초기화 역할을 수행 - 객체 생성    번만 호출된다.

-setter 객체 생성 이후에 호출이 가능 - 필드 초기화가 아니라 기존값 덮어쓰기객체 생성 이후라면 원하는 때에 언제라도 호출할  있다.

'Java > 노트' 카테고리의 다른 글

[Java] 클래스(Class)의 특징  (0) 2018.07.19

+ Recent posts