본문 바로가기
자바/Do it! 자바 완전 정복

Do it! 자바 완전 정복: 6장 클래스와 객체

by limdae94 2025. 1. 30.
 
Do it! 자바 완전 정복
프로그래밍 초심자들이 어려워하는 프로그램의 동작을 컴퓨터의 두뇌를 사진 찍듯 그림과 함께 설명한 구성이 눈에 띈다. 단기 코딩 학원에서는 다루지 않는 원리와 배경지식까지 배우며 정통 프로그래머로 거듭나는 뿌듯함을 느껴 보자. 여기에 400여 개의 프로그래밍 문제가 들어 있어 시험과 취업 면접도 대비할 수 있다. 컴퓨터공학과 1학년생부터 실무에서 자바를 쓰는 현직 개발자까지, 자바로 코딩하는 사람이라면 반드시 갖춰야 할 기본기를 이 책과 함께 ‘완전 정복’ 해보자
저자
김동형
출판
이지스퍼블리싱
출판일
2021.09.01
1~5장 내용은 생략하고 6장부터 정리를 시작합니다.

 

6.1 클래스와 객체의 개념

자바는 객체지향 프로그래밍 언어로, 클래스, 추상 클래스, 인터페이스와 같은 객체지향적인 문법 요소를 사용해 프로그램을 구성한다. 자바를 사용하려면 이러한 문법 요소를 이해해야 한다. 먼저 기본 문법 요소인 클래스에 관해 알아보자.

6.1.1 클래스의 개념 알아보기

  • 객체(Object)는 사용할 수 있는 실체
  • 클래스는 객체를 만들기 위한 설계도

따라서 1개의 정의된 클래스를 이용해 여러 개의 객체를 만들 수 있다.

💡클래스는 왜 사용할까?

자바가 기본 문법 요소로써 클래스를 사용하는 이유는 프로그램 문법 요소의 발전 과정에서 알 수 있다.

  • 변수: 특정 타입을 갖는 데이터 한 개를 저장
  • 배열: 특정 타입을 갖는 데이터 여러 개를 저장
  • 구조체: 여러 타입을 갖는 데이터 여러 개를 저장
  • 클래스: 여러 타입을 갖는 데이터 여러 개를 저장하고, 메서드 포함이 가능

6.1.2 절차지향과 객체지향 이해하기

절차지향 프로그래밍(PP: Procedural Programming)은 순서에 맞춰 단계적으로 실행하도록 명령어를 나열하는 방식을 의미한다. 클래스를 사용한 후에는 객체지향형 프로그래밍(OOP: Object-Oriented Programming) 방식이 주로 사용되는데, 이는 프로그램을 객체 단위로 수행하는 방식을 말한다. 절차지향 프로그래밍을 '기능 중심 프로그래밍', 객체지향 프로그래밍을 '객체 중심 프로그래밍'이라고도 한다.

 

자바에서 제공하는 객체지향 문법 요소

객체지향 프로그래밍 언어인 자바는 프로그램을 객체 단위로 구성해 상호 연동시킴으로써 프로그램을 실행한다. 자바에서 제공하는 객체지향 문법 요소는 크게 클래스(Class)와 인터페이스(Interface)가 있고, 클래스는 다시 '일반 클래스'와 '추상 클래스(Abstract Class)'로 나뉜다.

 

6.1.3 클래스 구조 살펴보기

클래스는 class 키워드와 함께 클래스명을 표기한다. 클래스명은 대문자로 시작하는 것이 관례이다.

class 클래스명 {
    ...
}

A 클래스를 포함하는 자바 소스 파일 A.java의 구조를 살펴보자. 자바 소스 파일은 클래스의 외부 구성 요소와 내부 구성 요소로 나눠 생각할 수 있다.

  • 클래스 외부 구성 요소(3개): 패키지, 임포트, 외부 클래스
  • 클래스 내부 구성 요소(4개): 필드, 메서드, 생성자, 이너 클래스

클래스 외부 구성 요소(3개) 살펴보기

  1. 패키지(Package)
    프로젝트를 생성할 때 패키지를 지정했다면 이 구성 요소에 패키지명이 포함되며, 반드시 주석을 제외하고 첫 번째 줄에 위치해야 한다. 클래스의 생성 과정에서 패키지를 생성하지 않으면 디폴트 패키지(Default Package)가 되어 패키지명이 생략된다.
  2. 임포트(Import)
    다른 패키지의 클래스를 사용하고자 할 때 포함된다. 패키지 다음에 위치한다.
  3. 외부 클래스(External Class)
    클래스의 외부에 또 다른 클래스가 포함될 수 있다. 즉, 1개의 .java 파일에 여러 개의 클래스가 포함될 수 있다는 것이다. 단, 외부 클래스에는 public 키워드를 붙일 수 없다.

클래스 내부 구성 요소(4개) 살펴보기

  1. 필드(Field): 클래스의 특징(속성)을 나타내는 변수이다.
  2. 메서드(Method): 클래스의 동작(기능)을 나타낸다.
  3. 생성자(Constructor): 클래스의 객체를 생성하는 역할을 담당한다.
  4. 이너 클래스(Inner Class): 클래스의 내부에도 클래스가 포함될 수 있다.

클래스 내부 구성 요소들 중 생성자를 제외한 3개 요소를 '클래스의 멤버(Meber)'라고 한다.

6.1.4 클래스와 객체 구분하기

클래스에서 객체를 만드는 과정은 생성자가 수행하며 클래스의 생성자로 객체를 만드는 과정을 '인스턴스화(Instantiation)'라고 한다. 클래스는 바로 사용할 수 없고 반드시 객체를 생성한 후, 해당 객체 안에 있는 필드, 메서드 및 이너 클래스를 사용해야 한다. 라는 것을 기억해야 한다.


6.2 객체의 생성과 활용

자바는 클래스 기반이고, 모든 클래스에 적용된다. 클래스로 객체를 생성하고 활용하는 방법에 대해 학습한다.

6.2.1 객체 생성하기

객체는 new 키워드로 생성할 수 있다. 모든 클래스가 객체를 new 키워드로 생성한다고 볼 수 있다. new 키워드로 해당 클래스의 생성자를 호출하며 생성된 객체는 힙 영역에 저장된다.

클레스명 참조변수명 = new 생성자();

예를 들어 A 클래스의 객체를 생성하면 다음과 같다.

A a = new A();

위의 코드를 말로 표현하면 'A() 생성자로 만든 객체를 힙 영역에 넣고, 주소값을 A 타입의 참조 변수 a에 저장하라!'라고 표현할 수 있다.

 

객체 생성에 따른 메모리 구조 살펴보기

클래스 A는 클래스 영역, 참조 변수는 스택 영역에 포함된다. 내부 공간에는 실제 데이터(객체)의 주소값을 저장한다. 생성자로 만들어진 객체는 힙 영역에 위치하며, 객체 내부에는 클래스의 멤버(필드, 메서드, 이너 클래스)가 위치한다. 이제 객체를 사용할 수 있는 상태가 된 것이다. 그런데 메서드를 살펴보면, 실제 메서드 구현 코드는 클래스 영역 안에 저장해 놓고, 객체 안에서는 메서드 영역의 위치만 가리키고 있다. 그 이유는 1개의 클래스로 만든 모든 객체는 속성(필드)은 달라도 기능(메서드)는 동일하기 때문이다. 즉, 객체를 100개 만들어도 메서드는 한 번만 만들면 된다는 뜻이다.

6.2.2 객체 활용하기

포인트 연산자 사용하기

자바에서는 힙 영역에 직접 접근할 수 있는 방법이 없다. 포인트 연산자(.)로 위치 정보를 포함하고 있는 참조변수를 이용해서만 객체에 접근할 수 있다. 포인트 연산자의 의미는 '해당 위치에 있는 객체 안을 보라' 정도가 될 것이다. 포인트 연산자를 이용해 객체 내부의 멤버를 활용하는 방법은 다음과 같다.

참조변수명.필드명;
참조변수명.메서드명();
A a = new A();
System.out.println(a.m); // 필드 활용
a.print(); // 메서드 활용