╱╱╭╮╱╱╱╱╱╱╭━━━╮╱╱╱╭╮╱╭╮╱╱╱╱╱╱ ╱╱┃┃╱╱╱╱╱╱┃╭━╮┃╱╱╱┃┃╱┃┃╱╱╱╱╱╱ ╱╱┃┣━━┳━━╮┃┃╱┃┣━╮╱┃╰━╯┣━━┳━╮╱ ╭╮┃┃╭╮┃┃━┫┃╰━╯┃╭╮╮┃╭━╮┃╭╮┃╭╮╮ ┃╰╯┃╭╮┃┃━┫┃╭━╮┃┃┃┃┃┃╱┃┃╭╮┃┃┃┃ ╰━━┻╯╰┻━━╯╰╯╱╰┻╯╰╯╰╯╱╰┻╯╰┻╯╰╯

Java/Java 기초

[Java] 클래스 (Class)

재안안 2022. 4. 7. 19:06

클래스를 알아보기 전에 우선 객체에 대해 설명 하고 시작하겠다.

 

자바의 대표적인 객체 예제는 변수, 함수이다.

선언 또는 정의된 모든 변수와 함수는 객체이다.

 

어떠한 크기더라도 메모리 공간에 저장되어 자리를 차지하고 있으면 (주소가 있으면)

객체라고 생각해도 좋다. 

 

클래스를 공부하기전 객체지향 언어의 특징을 알고 시작하면 좋으나 이는 다음에 설명하겠다.

 

클래스는 어떠한 객체를 만드는 설계도라고 생각하면 된다.

설계도를 통해 여러가지 데이터를 가지고 있는 어떠한 객체를 계속해서 만들 수 있는 것이다.

여러가지 데이터들을 묶어 놓기위한 객체를 만들기 위한 설계도이다.

이렇게 클래스로 인해 만들어진 객체는 인스턴스(instance)라고 한다.

 

그럼 이제 클래스에 대해 알아보겠다.

 

  • 클래스 구현
  • 클래스 사용
  • 클래스 생성자

 

우선 클래스를 만들어보겠다.

 

  • 클래스 구현

클래스는 아래와 같은 형식으로 구현한다.

class 클래스명 {
   .  .  .
}

 

class 키워드 그리고 클래스명이있다.

클래스명은 항상 대문자 알파벳으로 시작해야한다.

 

 

아래의 예제를 통해 설명하겠다.

 

Class 예제

위의 예제를 보면 Person 클래스가 구현됐다.

  • Person 클래스는 4개의 변수와 1개의 메소드를 가지고 있다.
  • Person은 사람 한명의 키, 몸무게, 나이, 이름을 데이터를 저장하는 객체이다.
  • 추가적으로 이 사람의 이름을 출력해주는 기능도 가지고 있다.

 

이때 Class 안에 선언된 변수를 필드(field)

Class 안에 선언된 함수를 메소드(method)라고 한다.

 

 

  • 클래스 사용

이제 클래스를 이용해 인스턴스를 만들어보겠다.

 

아래와 같이 하면 된다.

클래스명 변수명 = new 클래스명();

여기서 new는 클래스명()이 필요한 만큼의 메모리를 할당한다.

 

new로 인해 할당된 메모리의 주소가 '변수명'에 대입되는 것이다.

 

이때 '변수명'에는 할당된 메모리의 주소가 들어가야하니

'변수명' 왼쪽엔 클래스명이들어가야한다. (마치 자료형 처럼)

 

이때 메모리 주소가 들어가는 변수는 참조변수이다.

 

 

인스턴스가 만들어지는 과정을 알아봤으니 이제 클래스 사용을 알아보겠다.

 

아래의 예제를 통해 설명하겠다.

 

해당 예제에선

p1 인스턴스를 만들고

p1의 height변수에 접근해서 값 대입및 출력

그리고 p1 내부의 메소드도 사용하였다.

 

그리고 .을 사용해 Person 내부의 객체들에게 접근하였다.

.은 주소를 참조할 때 사용하는 참조연산자이다.

도메인 주소 jaeano.tistory.com의 그 .이다

 

실행 결과

 

첫줄은 p1을 출력한 결과이다.

Class.Person은 Class 패키지 안의 Person라는 뜻이다.

그리고 주소값이 들어있는걸 확인할 수 있다.

 

p1의 height에 126이 무사히 대입 되었으며

p1의 print()도 잘 사용 되었다.

 

  • 클래스 생성자

 

사실 우리는 클래스 생성자를 이미 한번 사용했다.

 

클래스명 변수명 = new 클래스명();

 

인스턴스를 만들 사용한 클래스명();이 클래스 생성자이다.

이를 기본생성자라고 한다.

 

그런데 이것 외에 또 다른 종류의 생성자가 있다.

 

아래의 예제를 통해 설명하겠다.

 

전체 생성자 예제

해당 예제에는 기본생성자전체생성자가 있다.

 

기본생성자는 인스턴스를 생성해주는 기능이다.

메소드와 달리 return type, modifier를 명시하지 않는다.

 

특이점으로 클래스생성시 따로 명시하지 않아도 자동으로 생성된다.

그런데 화면에는 생략되어 있는 것이다.

그래서 위의 예제에서도 사용이 가능 했던 것이다. 이는 이클립스가 제공하는 편의성이다.

 

그런데 만약 아래와 같은 전체 생성자가 선언 되었을 경우

선언되지 않은 기본생성자는 화면 생략처리가 아니라 이젠 선언되지 않은 것이 된다.

 

기본 생성자를 주석처리하면
선언되지 않은 생성자라고 뜬다.

 

그러므로 필요시 꼭 직접 생성해 주어야한다.

 

전체생성자

전체생성자는 사용자가 직접 선언 해주어야하며 인스턴스의 생성과 초기화를 한번에 하게 해주는 기능이다.

보면 매개변수로 데이터를 받아와서 각 필드에 대입하는 것을 볼 수 있다.

이때 보통의 값 대입의 형식과는 다른데 대입되는 변수에 this.가 붙어있는 것을 알 수 있다.

 

this는 객체 본인의 참조값을 나타낸다.

보통 생성자의 매개변수 이름과 클래스의 필드 이름이 같을 때 구분지으려고 사용한다.

 

 

이제 아래의 예제를 통해 생성자 사용에 대해 알아보겠다.

 

 

main

 

P2는 전체생성자를 통해 생성됐다.

p2이 정상적으로 생성되고 값도 제대로 대입된 것을 아래의 실행 결과로 알 수 있다.

 

실행 결과

 

아래의 전체 코드를 통해 한번 정리해보면 좋겠다.

 

전체 코드

 

 

결국 클래스(인스턴스)는 여러가지 데이터를 한번에 저장하기위해 사용한다.