티스토리 뷰

프로그래밍/Java

클래스, final

안싱미 2016. 1. 20. 16:06

클래스

클래스란 객체를 정의해놓은 것, 또는 객체의 설계도를 말한다.


그렇다면 객체는?
클래스에 정의된 내용대로 메모리에 생성된 것

- 객체의 구성요소 : 속성과 기능
  일반적으로 다수의 속성과 기능을 갖으며, 객체가 가지고 있는 속성과 기능을 그 객체의 멤버라고 한다.
  따라서 클래스는 속성과 (=필드, 멤버변수, 인스턴스 멤버변수, 인스턴스 필드)와 기능(=메소드)을 가진 객체를 정의해놓은 것이다.


인스턴스화란?
클래스로부터 객체를 만드는 과정

인스턴스란?
어떤 클래스로부터 만들어진 객체


  • 클래스를 찾아보자.

무제-1-01.png

  • 클래스로 만들어진 변수는 인스턴스라고 불린다.

 

  • 변수랑 다른건가?

→ 똑같다.

변수라고 한다면 기본형 타입으로 정의된 것, 인스턴스라고 한다면 클래스 타입으로 정의된 것.


 

  • 하나의 파일에는 하나의 클래스만 들어간다.

  • /** 주석을 사용하면 클래스명에 마우스를 올려놨을 때 설명을 함께 볼 수 있다.

무제-2-01.png

 




 변수의 종류





1. 인스턴스 변수


클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어진다. 

그렇기 때문에 인스턴스 변수의 값을 읽어오거나 저장하기 위해서는 먼저 인스턴스를 생성해야한다.

인스턴트 필드들은 초기화를 시킬 필요가 없다.



2. 클래스 변수


인스턴스 변수 앞에 static을 붙인 것. 클래스 변수는 모든 인스턴스가 공통된 저장공간을 공유하게 된다. 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성의 경우 클래스 변수로 선언해야한다.

클래스 변수는 인스턴스를 생성하지 않고도 언제라도 바로 사용할 수 있다는 특징이 있으며 '클래스이름.클래스변수'와 같은 형식으로 사용한다.

상수를 만들때 static이라는 키워드가 반드시 들어간다!

외부에서 클래스 필드의 값을 변경하면, 클래스 자체가 가지고 있는 값도 바뀐다.


3. 지역변수


메서드 내에 선언되어 메서드 내에서만 사용 가능하며, 메서드가 종료되면 소멸되어 사용할 수 없게 된다. for문 또는 while문의 블럭 내에서 선언된 지역변수는 지역변수가 선언된 { } 안에서만 사용할 수 있고, { } 블럭을 벗어나면 소멸되어 사용할 수 없게 된다.


인스턴스 변수 vs. 클래스 변수

인스턴스 변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만,
클래스변수는 모든 인스턴스가 하나의 저장공간을 공유하므로, 항상 공통된 값을 갖는다.



 

Pet.java

무제-1-01.png

무제-1-01.png


PetStore.java

무제-1-02.png

무제-1-01.png

무제-1-01.png


 



메소드란?

어떤 작업을 수행하기 위한 명령문의 집합. 주로 어떤 값을 입력받아서 처리하고 그 결과를 되돌려준다.


Q. 메소드를 작성하는 이유?
- 반복적으로 사용되는 코드를 줄이기 위해서. (가독성을 위해서)
- 유지보수가 편리하다.

리턴을 하기 위해서는? void 가 아닌 다른 변수로 선언.

매개변수(파라메터)란?

메서드를 호출할 때 매개변수로 지정한 값을 메서드의 매게변수에 복사해서 넘겨준다.

매개변수의 타입이 기본형일때는 기본형 값이 복사되고, 참조형일때는 인스턴스의 주소가 복사된다.


즉, 기본형 매개변수는 변수의 값을 읽기만 할 수 있지만, 참조형 매개변수는 변수의 값을 읽고 변경할 수 있다.

Pet.java

무제-1-02.png

PetStore.java

무제-1-01.png


클래스 메소드 vs. 인스턴스 메소드

인스턴스 메서드는 인스턴스변수와 관련된 작업을 하는, 즉 메서드의 작업을 수행하는데 인스턴스 변수를 필요로하는 메서드.
클래스 메서드는 인스턴스와 관계없는 메서드를 클래스 메서드로 정의한다. 
클래스를 설계할 때, 멤버 변수 중 모든 인스턴스에 공통적으로 사용해야하는 것에 static을 붙인다. (ex. 메인)





제어자(modifier)


제어자란?

클래스, 변수 또는 메서드의 선언부와 함께 사용되어 부가적인 의미를 부여한다.

제어자의 종류는 크게 접근 제어자그 외의 제어자로 나뉜다.


접근 제어자 - public, protected, default, private

그 외 - static, final, abstract, native, transient, synchronized, volatile, strictfp


<그 외>

  • static - 클래스의, 공통적인

static이 붙은 변수(클래스 변수)는 인스턴스에 관계없이 같은 값을 갖는다.
static이 사용될 수 있는 곳 - 멤버변수, 메서드, 초기화 블럭

  • final - 마지막의, 변경될 수 없는

상수(변하지 않는 값)로 사용한다.
final은 변수 앞에 붙는다.
변수명은 모두 대문자이다. 띄어쓰기 대신에 언더바를 쓴다.

public static final int TEAM_COUNT(변수명) = 5(값);


<접근 제어자>


접근 제어자를 사용하는 이유?

외부로부터 데이터를 보호하기 위해서
외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서



  • private - 같은 클래스 내에서만 접근이 가능함.

인스턴트 필드들은 public을 쓰면 안된다. 어떤 객체가 가진 속성을 누구든지 맘대로 바꿀 수 있기 때문에. 그렇기 때문에 인스턴트 필드들은 그 클래스만 쓸 수 있도록 해야한다. 그게 바로 

무제-1-01.png


 그렇다면, 어떻게 데이터를 넘기는 것일까?

→ 데이터를 넣어주고, 가지고 올 수 있는 무언가가 필요하다.

→ 그게 바로 setter와 getter ! 이것을 반드시 만들어주어야 한다


  • default - 같은 패키지 내에서만 접근이 가능함.

  • protected - 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능함.

  • public - 접근 제한이 전혀 없음.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함