본문 바로가기

DEVELOPER/Java

[JAVA 파헤치기] 필드(Field)와 메서드(Method) 쉽게 이해하기 1 - 필드

안녕하세요 :) 백엔드 개발자 제임스입니다.😊😊

이번에 포스팅할 내용은 [필드와 메서드]입니다. 우리가 자바의 객체 지향 프로그래밍(OOP)을 학습하면, 가장 먼저 접하게 되는 개념인데요. 기본이면서도, 정말 중요한 개념입니다. 이러한 이유로 사실 우리는 필드와 메서드에 대해서 어느 정도 알고 있습니다. 그렇죠?? 🧐

만약 기억이 잘 안 난다면 아래 내용을 참고해볼까요?

* 참고
- 클래스의 구성 요소인 필드와 메서드
- 필드(Field) : 객체의 속성, '클래스의 포함된 변수'
- 메서드(Method) : 객체의 기능, '특정 작업을 수행하는 일련의 명령문들의 집합'

 

그럼에도 여전히 필드와 메서드가 어려운 분들이 있을 것이라 생각합니다. 따라서 이번 포스팅은 해당 개념과 친해지지 못하신 분들을 대상으로 글을 작성하려고 합니다.

 

" 왜 필드와 메서드는 간단하면서도 어려운 것일까요? "


필드와 메서드 관련 용어

저는 그 이유가 낯선 단어들이 너무 많기 때문이라고 생각합니다. 당장 위 그림에 적힌 단어들만 봐도 어렵게 느껴집니다...🥲

그렇기 때문에 이번 포스팅에서는 최대한 어렵지 않은 용어와 많은 예시로 정리를 해보도록 하겠습니다. 서론은 이만 작성하고, 본격적으로 필드와 메서드에 대해서 알아보겠습니다.

* 해당 게시글을 읽는데 걸리는 예상 시간 : 8
내용이 다소 길지만, 끝까지 읽고 피드백을 남겨주시면 감사하겠습니다 :)

 



필드(Field)      


필드(Field) : 객체의 속성, 클래스에 포함된 변수

커피머신

우리는 앞에서 객체라는 용어를 배웠는데요. 위 그림의 커피머신을 객체라고 생각해 봅시다. 그렇다면 위 커피머신을 만들어준 설계도(클래스)가 있었겠죠? 

그 설계도(클래스)에는 커피머신을 만들기 위한 재료가 적혀 있었을 것입니다. 여기서 재료 커피머신을 이루는 요소가 되겠네요. 그리고 이는 우리가 배울 필드에 해당하게 됩니다. 한번 커피머신 설계도에 어떤 재료가 있을지 생각해볼까요?

 

1) 커피머신 설계도의 재료(필드) 알아보기

커피머신 설계도의 재료

저는 설계도에 위 내용과 같이 7개의 재료가 있을 것이라고 생각했습니다. 분명 더 많은 재료를 생각한 분들도 있을 것입니다. 이렇게 재료를 구성할 때는 정답이 없습니다. 다만, '재료를 어떻게 구성했냐'에 따라 추후 개발을 진행할 때, 과정과 결과가 달라질 수 있습니다. 따라서 사용 목적에 맞게 구성하는 것이 가장 좋습니다.

다시 돌아와서, 코드 세계에서는 위 같은 재료를 '변수'라는 형태로 표현합니다. 변수라는 단어에 당황하지 마세요. 변수재료를 담기 위한 그릇이라고 생각하시면 좋습니다. 

변수

그리고 이러한 그릇은 항상 크기를 지정해줘야 하죠. 그것을 타입이라고 합니다.

여기 커피머신 설계도의 재료들을 그릇으로 표현하면 아래와 같습니다.

변수 그릇으로 표현한 커피머신의 재료(필드)

 

지금까지 예시를 통해서 필드를 이해해보았는데요. 이번에는 이 설명을 코드로 작성해보겠습니다. 

 

2) 필드를 코드로 작성해보기

클래스에 필드 선언하기
// 1. 커피 머신 클래스(설계도) 입니다.
public class CoffeeMachine {

    // 2. 필드 선언: 재료 그릇을 만들어줍니다.
    
    String name; // 이름
    String beans; // 사용할 원두 종류
    int brewGroupNum; // 커피 추출구 개수
    int cupCapacity; // 얹을 수 있는 컵 개수
    
    boolean coffeeBtn; // 커피 버튼
    boolean waterBtn; // 물 버튼
    boolean milkBtn; // 우유 버튼

}

위에서 그릇으로 예시를 들었던 변수들을 코드로 작성하면 위와 같이 됩니다. 이렇게 작성한 내용이 필드(Field)가 되는 것이죠.

그리고 해당 설계도(클래스)에 맞게 커피머신 객체를 생성하고, 값을 넣어주면 우리가 구상한 필드에 맞게 커피머신이 완성됩니다.

필드에 값을 넣은 모습

 

3) 필드(Field)의 심화 내용 이해하기

우리는 이제까지 필드의 기본적인 개념을 알아보았는데요. 이번에는 조금 더 심화적인 내용을 다루어보도록 하겠습니다. 하지만 걱정하지 마세요. 이번에도 역시 예시를 들면서 쉽게 알아보도록 하겠습니다.


이번에는 우리가 카페 사장님이 되었다고 생각해봅시다. 카페를 곧 오픈할 것인데요. 손님이 많이 올 것으로 예상되어, 커피 머신을 여러 개 두려고 합니다. 위에서 작성한 코드로 말이죠.

 

# 인스턴스 변수와 클래스 변수

- 클래스를 통해 만들어진 인스턴스는 독립적인 공간에 저장
- 고유한 개별성을 갖는 인스턴스 변수
- 객체들 서로 값을 공유하는 클래스 변수

커피 머신 3개를 생성하고, 각 머신에 이름 부여

위에서 만들었던 커피머신 설계도(클래스)를 통해서, 3개의 커피머신을 생성했습니다. 이어서 각 머신의 name 그릇(변수)에 서로 다른 이름들을 담았습니다. 참고로 간단하게 설명하기 위해 이름을 대표로 예시를 들고 있습니다.

위 그림을 보면, 각 커피머신 객체에는 이름이라는 변수에 다른 값들이 저장되고 있습니다. 필드에 적힌 다른 변수들도 동일하죠. 이와 같이 필드 변수들은 객체끼리 값을 공유하지 않습니다. 이를 고유한 개별성을 갖는다고 하는데요. 이러한 변수를 인스턴스 변수(Instance variable)라고 합니다.

클래스의 인스턴스 내에서만 사용되는 변수이기 때문에 인스턴수 변수입니다. 갑자기 어려운 단어에 당황스러울 수 있습니다. 인스턴스 개념이 아직 낯선 분들은 아래 내용을 참고해주세요.

* 객체와 인스턴스
- 객체 : 실제로 존재하는 것 ( 어떠한 데이터(실체)와 관련된 동작을 포함한 개념)
- 인스턴스 : 어떤 클래스로부터 만들어진 객체
- 객체와 유사하지만, 인스턴스는 어떠한 클래스로부터 만들어졌는지 강조하는 의미
- ex. 책상은 객체다.
- ex. 책상은 책상 클래스의 인스턴스다.

 

즉, 우리가 위에서 작성했던 필드 변수들은 인스턴스 변수입니다.


다시 카페 예시로 돌아와 보겠습니다. 우리는 커피 머신을 3개 만들어서 각각 이름도 부여했습니다. 이번엔 커피 머신에 넣을 원두의 종류를 선택할 건데요. 과연 카페 사장님은 서로 다른 원두를 각각의 머신에 넣어줘야 할까요?

정답은 아닙니다.

물론 예외로 원두를 종류별로 사용하는 카페일 수도 있겠지만, 여기서는 한 종류의 원두만 사용할 것입니다. 다시 말하면 "커피 머신 A, B, C" 모두 같은 원두를 사용할 것이며, 만약 A에서 원두 절반을 사용했다면, B와 C는 남은 절반의 원두에서 사용해야 하는 것이죠. 이 상황 같은 경우를 값을 공유하고 있다고 할 수 있습니다.

하지만 우리는 위에서 선언한 필드 변수들이 개별성을 갖는다고 배웠습니다. 그래서 이때 사용되는 것이 static이라는 키워드입니다. 

// 다른 인스턴스와 값 공유

static String beans; // 사용할 원두 종류

 

위 코드와 같이 선언된 변수를 클래스 변수(Class variable) 또는 static 변수, 공유 변수라고 합니다. 그림으로 보면 아래와 같이 되는 것이죠.

원두 종류의 값을 각 머신과 공유

여기서 잠깐 클래스 변수의 특징을 한번 짚어보겠습니다.

만약 '사용할 원두의 종류'가 '산미가 심한 원두'로 바뀐 다면, 모든 커피 머신에서 '산미가 심한 커피'를 추출하게 될 것입니다. 또한, static으로 지정된 변수는 가령 machineA에서만 값을 변경해도, 다른 머신에도 영향이 가게 되죠.

A 머신에 아라비카를 할당하고, 각 머신의 원두 출력

따라서 A 머신에만 원두를 "아라비카"로 할당해도, 위 코드의 결과는 모두 "아라비카"를 출력할 것입니다.

* static 키워드
static 키워드는 필드뿐만이 아닌, 메서드와 이너 클래스에도 사용할 수 있습니다. static 키워드가 붙어있는 멤버를 '정적 멤버'라고도 부릅니다. static을 사용하는 멤버는 어차피 공유 멤버이기 때문에 인스턴스 생성 없이도 사용할 수 있습니다.

* ex. CoffeeMachine.beans (클래스.멤버명)

 


 


다음 [자바 파헤치기] 포스팅 내용

  • [자바 파헤치기] 필드(Field)와 메서드(Method) 쉽게 이해하기 2 - 메서드

https://kang-james.tistory.com/entry/%EC%9E%90%EB%B0%94-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0-%ED%95%84%EB%93%9CField%EC%99%80-%EB%A9%94%EC%84%9C%EB%93%9CMethod-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-2-%EB%A9%94%EC%84%9C%EB%93%9C

 

[자바 파헤치기] 필드(Field)와 메서드(Method) 쉽게 이해하기 2 - 메서드

https://kang-james.tistory.com/entry/%EC%9E%90%EB%B0%94-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0-%ED%95%84%EB%93%9CField%EC%99%80-%EB%A9%94%EC%84%9C%EB%93%9CMethod-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%..

kang-james.tistory.com

내용이 길어서 게시글을 나눴습니다. 다음 내용은 링크를 통해 확인해주세요.
반응형