끝을 보는 용기

Spring 본캠프 Day 036 - [Java 문법 종합반] 1주차 수강 (1/2)

writingforever162 2024. 11. 11. 22:12

"개인 과제의 학업 성실도 및 성적"

 

"팀 프로젝트 활동 참여율 및 소통"

 

본캠프 둘째 주의 첫날이다. 팀을 구성할 때 고려하는 기준을 머릿속에 새겨두고 싶어서 적었다. 사전캠프 때 자바(Java) 강의를 들으면서도 이 학습 방향이 맞는지 의문이 종종 들곤 했는데, 내일배움캠프에서 지급한 강의를 들으면서 당시 선택이 옳았음을 깨달았다. 강의 방식부터 전체 흐름까지 다른 두 강의가 서로 구멍 난 부분을 메워주었다. 12월이 되기 전까지는 개인 과제와 각자 공부하는 기간이라 분위기는 저번 조와 다르게 조용했다. 마치 독서실에서 공부하는 모범생이 된 기분이 들었다. 열심히 진도를 빼야겠다.

 

[습관 관련]

목감기가 또 제대로 왔다. 아침에 거북목 스트레칭과 허리 근력 강화 운동을 10분씩 간단하게 했고, 점심과 저녁때도 각각 10분씩 추가로 운동했다. 늘 해왔듯이. 50분 공부하고 10분씩 일어나서 쉴 때마다 『생강빵과 진저브레드』 책을 조금씩 읽었다. 책에서는 주로 출판 번역 때 겪는 고충을 다루지만, 번역가라면 무엇을 염두에 두고 어떤 면을 고민해야 하는지 알 수 있어서 좋았다.

순서가 살짝 꼬이긴 했으나, 반복문과 배열과 삼항 연산자를 공부했다면 풀 수 있다는 26번 문제를 스스로 풀어냈다! 예전에 같은 조에서 공부한 팀원분과 젭(ZEP)의 스터디룸에서 풀었는데, 어떤 개념을 먼저 적용할지 생각하는 데 시간이 좀 걸리긴 했으나 맞추었다! 문제 풀이에 큰 도움을 준 팀원분의 개발 일지 또한 감사의 뜻으로 링크를 걸어둔다. 팀원분 덕분에 쓸데없이 연산하는 일을 미리 막을 수 있었다.

 

[인용 및 참고 출처]

1. 강의: 스파르타코딩클럽, "Java 문법 종합반", 강의 소개, (2024.11.11)

2. 구글 검색: 티스토리, "Java, 자바 커피", Java라는 이름은 어디서 왔을까?, (2024.11.11)

3. 구글 검색: 티스토리, "침대 토퍼 뜻", 토퍼(topper)란?, (2024.11.11)

4. 사전: "compile", "loader", "assign", 네이버 영어사전, 네이버 영어사전, (2024.11.11)

 

[학습 관련]

처음 자바(Java)를 접했을 때 JVM이라든지 JDK라든지 용어 정리가 하나도 되지 않아 본캠프 때 강의를 받으면 꼭 정리하리라 다짐했었다. 오늘 강의를 들으며 정리할 수 있어서 정말 좋았다. 원래 듣는 강의와 함께 들으니 서로 보완해 주는 느낌이 강하게 들었다. 사전캠프 기간에 열심히 공부한 보람이 있었다.

 

1. 자바(Java)라는 이름은 어디에서 왔을까?

: 어디서든 마실 수 있는 커피처럼 어디서나 동작한다는 의미로 자바 커피에서 이름을 따옴 ▶ 자바 커피는 인도네시아의 자바섬에서 재배되는 원두를 사용한 커피인데, 자바의 개발자들이 자주 방문한 커피 전문점에서 자바 커피 원두를 썼다고 한다.

2. 자바를 왜 배워야 할까?

① 자바는 침대 매트리스 위에 올려놓고 쓰는 얇은 매트인 토퍼(topper)와 같다. 즉, 여러 기기에서 실행할 수 있다.

② 코드 이해하기와 유지 보수가 쉽다.

③ 안정성이 높다.

④ 대규모 앱 개발이 가능하다.

⑤ 다양한 개발 도구와 라이브러리(Library)를 사용할 수 있다.

 

3. JVM이란?

① Java Virtual Machine

② 토퍼를 사용하려면 토퍼를 올려놓을 침대가 필요하듯이, 자바를 실행할 환경을 제공하는 가상의 기기

③ JVM이 없으면 '윈도우에서는 이렇게 해줘' 또는 '모바일에선 이렇게 해줘' 같이 기기마다 환경을 설정해야 한다.  

 

4. JVM 구성

(1) 바이트코드(Bytecode): 사람이 작성한 코드가 운영체제가 읽을 수 있도록 자바 컴파일러로 변환한 코드

(2) 자바 컴파일러(Java Compiler): 사람이 작성한 자바 코드를 운영체제가 읽을 수 있는 바이트코드로 변환해 주는 변환기. 사람이 작성한 코드는 확장자가 java라서 운영체제가 읽지 못하므로 '.java 파일'을 확장자가 class인 '.class 파일'로 바꿔줘야 한다. compile은 '작성한 코드를 이진수로 바꾸다'를 의미한다. 

(3) 인터프리터(Interpreter): 운영체제가 읽은 바이트코드를 기기가 실행할 수 있는 기계어로 번역해 주는 해석기 

(4) JIT 컴파일러(Just In Time Compiler): 인터프리터의 효율을 높여주는 해석기. 인터프리터와 JIT 컴파일러는 한 묶음이라고 보면 된다.

(5) 메모리 영역: 자바 데이터를 저장하는 영역

(6) 클래스 로더(Class Loader): .class 파일을 메모리 영역에 담는 운반기. loader는 짐을 의미하는 load와 사람을 뜻하는 접미사 er의 합성어로, '짐을 싣는 사람' 또는 '적재기'를 의미한다.

(7) 가비지 콜랙터(Garbage Collector): 메모리 영역에서 쓰지 않는 데이터를 일정 주기마다 흡수해 가는 청소기 

 

5. 용어 정리

(1) 운영 체제

ⓐ 기기가 프로그램을 실행하는 운영 환경 

ⓑ 윈도우(Windows), 안드로이드(Android), iOS, 리눅스(Linux) 등등

(2) 앱 (App, Application)

ⓐ 운영 체제 위에서 실행되는 프로그램

ⓑ 모바일 앱(Mobile App), 서버 앱(Server App) 등등

 

6. 객체 지향 프로그래밍이란?

세상에 존재하는 모든 객체에는 특징과 행동이 있는데, 이러한 객체와 닮게 프로그래밍적으로 만드는 것을 객체 지향 프로그래밍이라고 한다. 

ⓒ 객체 지향 프로그래밍에서 '특징'은 속성이나 변수라는 이름으로 표현된다.

ⓓ 객체 지향 프로그래밍에서 '행동'은 함수나 메서드라는 이름으로 표현된다.

 

7. JDK, 넌 누구니?

(1) Java Development Kit, 일명 자바 개발 키트 

(2) 포함한 기능

ⓐ 자바 실행 환경인 JRE(Java Runtime Environment)

ⓑ 자바 컴파일러 

ⓒ 코드를 디버깅하는 JDB

▶ JDB는 자바 디버거(Java Debugger)의 줄임말

▶ 디버깅(Debugging): 코드 오류나 버그를 찾아서 수정하는 과정. 일명 벌레 잡기!

(3) JDK 안에 JRE가, JRE 안에 JVM이 있다!

 

8. 자바 실습

public class FirstWeekStudy {
    public static void main (String[] args) {
        // String[] args
        // [1] 메인 메서드를 호출할 때 넣을 변수들, 일명 데이터들
        // [2] String[]: 문자열 여러 개인 자료형
        // [3] args: 문자열 여러 개인 변수의 이름
        // [복습 1] 메서드(method)는 일종의 함수이다.
        // [복습 2] 자료형은 데이터 타입을 의미한다.
        // [복습 3] args 대신 다른 이름 아무거나 써도 된다.

        System.out.println("Our First Project! :D");
        // [1] 마침표(.)는 하위 요소를 표현한다.
        // [2] System: 클래스
        // [3] out: System 클래스 안에 있는 객체
        // [4] println: out 객체 안에 있는 행동, 즉 메서드
        // [출력문] Our First Project! :D

        final int number = 10;
        // 상수로 선언
        // 상수: 변하지 않는 저장 공간
        // number = 11;처럼 값을 다시 넣으려고 하면 오류가 발생한다!
        // ==부대찌개 먹는 동안 그 냄비에 다른 음식을 넣지 않는다!

        System.out.println(number);
        // [출력문] 10
    }
}

 

9. 실습 결과

상수로 선언한 변수에 다른 값을 저장하려고 하면 오류가 발생하는지 궁금해서 직접 해봤다. 다 입력하기도 전에 바로 빨간 전구가 떴다. 정수형 int 타입 변수 number에 final을 붙이지 말라고 오류 정정 방법까지 알려주었다. assign은 '맡기다' 또는 '배정하다'를 의미하는데, 값을 상수 변수인 number에 넣을 수 없다고 빨간 글씨로도 알려주었다. 인텔리제이(IntelliJ)가 얼마나 친절한지 새삼 다시 느꼈다.

 

[기타 사항]

저녁 7시부터 예정된 깃(Git) 기초 2차 특강을 막 들은 시점부터 몸이 확 나빠졌다. 저녁 먹기 전에 TIL에 내용을 정리하며 강의를 들었으니 망정이니, 하마터면 하루를 마무리조차 못 할 뻔했다. 열도 좀 나는 듯하고 몸이 으슬으슬한 데다, 난데없이 들이닥친 졸음에 집중력을 바닥까지 박박 긁어모아야 했다. 

그래도 뿌듯한 기분을 생략할 순 없지. 저번 주까지 같은 팀으로 지낸 팀원이 오늘 우수 TIL에 선정되었다. 진심으로 기뻤다. 저번 주부터 이건 자존심 싸움이라고, 우수 TIL은 무조건 우리 11조에서 나와야 한다고 줄기차게 말했더랬다. 축하의 의미로 팀원의 개발 일지 링크를 달아둔다.

 

오늘 특강이 끝나기가 무섭게 팀원 한 분께 연락했다. 일요일에 깃(Git)이랑 깃허브(GitHub) 같이 연습하지 않겠느냐고. 지금 코드도 한 번 날려 버리고 오류도 실컷 내 봐야 나중에 사고뭉치가 되지 않을 듯했다. 메모리 용량이 초과하지 않으려면 사용법이 손에 익어야 한다.

 

 이번 주 관건은 시간 관리다. 잘해보자. 제대로!