끝을 보는 용기

Spring 사전캠프 Day 015 - 자바(Java) 공부: 변수 (2/6)

writingforever162 2024. 10. 21. 18:09

'클래스가 붕어빵 틀이 아니라고?'

 

담담하게 '메서드 붕어빵'이라고 검색했다가 입이 떡 벌어졌다. 두 손은 마른세수하느라 바빴고 한숨이 절로 튀어나왔다. 심호흡 후 더 찾아보니, 아무래도 객체나 클래스가 너무 추상적인 개념이라 종종 붕어빵에 비유한단다. '어제까지만 해도 객체는 붕어빵, 클래스는 붕어빵 틀이라고 외웠는데 어떡한담?'부터 '생각 회로를 전부 뜯어고쳐야 하나?'까지 온갖 생각이 머릿속에서 펑펑 터졌다. 폭죽처럼.

 

'아니, 왜 초반부터 이런 시련을 주시나요…….'

 

문제는 '그럼 둘의 관계를 오늘 다시 정리하느냐 마느냐'였다.

 

시도할 수 있는 대안은 총 두 가지로 첫째, 시간이 걸리더라도 글과 영상을 읽으며 관계를 재정립하거나 둘째, 일단 이대로 진도를 나가면서 추후 자연스레 회로가 편집되길 기다리기였다. 

 

고민 끝에 나는 여기서 머뭇대기보다는 우선 더 걸어보기로 했다.

 

'클래스가 여러 객체 사이의 공통된 속성들을 정의한 분류나 집합'이라는 말은 알겠는데 이해 가진 않았기 때문이다. 여기서 끙끙 앓는다고 크게 나아지는 일도 없었고. 이 해결책이 부디 올바른 선택이길 바라며 다음 내용으로 넘어갔다. 그 덕분인지 진도를 꽤 나갔으니 어쨌든, 고생했다. 오늘도.

 

[습관 관련]

여덟 시 되기 전 기상에 성공했다. 자바 공부에 막 돌입해서인지, 의문이 들 때마다 검색하고 관련 글과 영상을 보다 보니 시간이 표현 그대로 쏜살같이 흘러갔다. 어느 정도 파고드는 집요함은 필요할지라도 계속 한 가지 궁금증이 꼬리에 꼬리를 물면 정체될 수밖에 없다. 사전캠프의 3주 차인 이번 주가 더욱 소중하게 느껴진다. 빨리 진도를 빼서 문제 한 번 제대로 풀어보고 싶다.

 

[인용 및 참고 출처]

1. 구글 검색: velog, "메서드 붕어빵", 객체는 왜 붕어빵이 아닐까, (2024.10.21)

2. 구글 검색: velog, "자바에서 인터페이스란?", 자바에서 인터페이스란, (2024.10.21) 

3. 구글 검색: 혼공학습단, "자바에서 접근이란?", 자바 접근 제한자의 종류와 차이, (2024.10.21)

4. 강의: 클래스101 온라인클래스, "[100제 풀이] 예제로 마스터하는 Java(자바) 종합 클래스", 강의 소개, (2024.10.21)

5. 구글 검색: 구름EDU, "접근제한자를 쓰는 이유", 접근제어자를 사용하는 이유, (2024.10.21)

6. 사전: "void", 네이버 영어사전, 네이버 영어사전, (2024.10.21)

 

[학습 관련]

1. 들어가기 전 용어 정리

ⓐ 자바의 인터페이스(Interface)는 일종의 추상 클래스로 다른 클래스를 작성할 때 기본이 되는 틀을 제공하며, 다른 클래스 사이에서 중계를 담당한다.

ⓑ 메서드(Method)는 함수의 일종으로 어떤 특정한 동작이나 작업, 행위 등을 수행하는 것이다.

클래스(Class)는 객체를 생성하는 틀이다. 프레임(frame)이나 공장 및 템플릿과도 같다.

ⓓ 객체(Object)는 클래스라는 청사진을 바탕으로 만들어진 실체, 즉 고유한 상태와 행동을 가지는 독립적인 실체이다.

ⓔ 자바에서 접근(Access)은 클래스 및 인터페이스, 그리고 이들이 가지고 있는 멤버의 접근을 의미한다.

 

2. 자바(Java) 기본 뼈대

public class VariablePrac2 {
    public static void main(String[] args) {
       // 중괄호 안에 구현할 코드를 작성한다.
       // 2-1) public: 접근제한자 
       // 2-2) VariablePrac2: 클래스 이름
       // 2-3) void: 반환타입
       // 2-4) main: 메서드 이름
       // 2-5) String[] args: 파라미터스
    }
}

 

2-1) 접근제한자(Access Modifier)

ⓐ 클래스나 메서드에 접근할 수 있는 범위를 지정하는 키워드. '접근제어자'라고도 함

사용 목적: 개발자가 의도하지 않은 오작동 방지 및 객체가 가진 정보 보호

ⓒ 사용 배경: 프로젝트 규모가 커질수록 복잡성 또한 늘어나며 객체를 사용하는 사용자가 객체 내부의 변수나 메서드에 접근했다가 개발자의 예상 밖 오작동을 일으킬 수 있음

ⓓ 종류: 접근 허용 범위 순으로 public > protected > default > private ▶ 비유: public은 공원의 공중화장실, private는 직원 전용 화장실

 

2-2) 클래스 명명 규칙

public class VariablePrac2 {
   public static void main(String[] args) {
    // 규칙 [1]: 단어의 맨 앞 글자는 대문자로 표기한다.
    // 규칙 [2]: 단어 연결 시 각 단어의 첫 글자를 대문자로 표기한다.
    // VariablePrac2가 클래스 이름이다.
   }
}

 

2-3) 반환타입(Return Type)

public class VariablePrac2 {
   public static void main(String[] args) {
       // 반환타입은 함수를 통해 반환할 값이 있니, 없니?'를 나타낸다.
       // 반환할 값이 없으면 void를 쓰면 된다.
       // 참고: 단어 void는 '텅 빈, 빈 공간, 공허감'을 의미한다.
   
       System.out.println("Hello World~");
       // 의미 [1]: 이 메인 메서드는 호출해도 결과로써 반환되는 값이 없다.
       // 의미 [2]: 또한 Hello World~를 출력하는 행위만 한다.    
   }
}

 

2-4) 메인 메서드(Java's main() method)

public class VariablePrac2 {
    public static void main(String[] args) {
     // 메인 메서드는 시작점(Entry point)을 알려준다. 
     // 길게 작성된 소스 코드에서 프로그램의 시작이 어딘지 모르면 안 되니까!
     // 자바는 실행되면 가장 먼저 메인 메서드를 찾는다.
     // 주의 사항 [1]: 반드시 main으로 입력해야 한다.
     // 주의 사항 [2]: main_method 안 된다.
     // 주의 사항 [3]: main3 또한 안 된다.
    }
}

 

2-5) 파라미터스(Parameters)

public class VariablePrac2 {
    public static void main(String[] args) {
     // 하나 또는 둘 이상의 파라미터 값을 넣어서 메서드를 호출할 수 있다. 
     // 파라미터스에는 그러한 파라미터들의 값을 저장할 변수들을 명시한다.
     
     // [1] String: 문자열. S는 반드시 대문자로 표기해야 한다.
     // [2] 대괄호[]: 배열, 즉 값을 여러 개 담을 수 있는 바구니이다.
     // [3] args: 하나의 변수명 
     //     [3-1] argument의 약자로 '인수, 독립 변수'를 의미한다.
     //     [3-2] 값을 여러 개 받을 수 있기 때문에 복수형인 args로 입력한다.
     //     [3-3] args를 주로 사용하나 asdf처럼 임의로 명명해도 상관없다.    
    }
}

 

3. 변수에 값 저장하기

public class VariablePrac2 {
    public static void main(String[] args) {
        // 기호 '='는 대입 연산자로 '오른쪽 값을 왼쪽에 저장하라'는 의미이다.
        
        int age;
        // [1] 정수형(int)타입의 변수 age 선언
        age = 25; 
        // [2] 변수 age에 25라는 값 저장
        System.out.println(age); 
        // [3] 변수 사용. 25가 출력된다.
       
        int num = 30;
        // [추가 사항] 변수 선언과 값 저장은 동시에 할 수 있다.
        System.out.println(num); 
        // 정수형(int)타입의 변수 num 선언과 동시에 저장된 값 출력
        // 30이 출력된다.
    }
}

 

4. 실습 결과

main 대신 main2로 입력했더니 기본 메소드를 찾을 수 없다는 오류가 발생했다. 자바는 첫인상과 다르게 꽤 친절했다. 인텔리제이(IntelliJ) 프로젝트 실행 단축키가 Windows 기준 '[Shfit] + [F10]'이라는 사실 또한 배웠다.

 

[기타 사항]

내일은 static 키워드가 뭔지 간단히 배우고 변수 및 변수 선언 내용 속 부족한 부분을 채울 차례이다. 이번에 들어간 조는 저번과는 또 다른 분위기라 마치 밖에서 신선한 공기를 들이마신 듯 머릿속을 환기할 수 있었다. 공부할 내용이 쉽지 않다 보니, 새로운 조에서 인사 나눌 때 느낀 어색하고 낯선 기분이 설렘으로 다가왔다. 이번 주 시작이 참 보람차고 좋다.