<멋쟁이사자처럼> 1주차

장수빈·2026년 3월 22일

1. 김영한의 자바 입문

(1) 소감

김영한의 자바 입문을 통해 처음으로 자바를 시작하게 되었다.
개발자가 되려면 필수적으로 해야하는 언어라고 듣기도 했고 주변에 할줄 아는 사람들이 너무 많아서 뒤쳐지지 않기 위해서라도 열심히 해보자고 다짐하고 시작했다.
강의를 들으며 코드를 치다보니 부끄럽지만 아직도 내가 영타가 이렇게 부족했나하는 생각이 들었다..
그래도 많이 발전했다고 생각했는데 아직 많이 느리고 모자란 것 같다.
자바는 작년에 조금씩 했던 자바 스크립트와는 비슷한 듯 다른 부분이 있어 신기했다. 개인적으로 왜인지는 모르겠지만 자바가 조금 더 어려운 느낌이 든다.
앞으로 더욱 열심히 공부해야겠다는 다짐을 할 수 있었던 시간이었다.
밑으로는 강의를 들으며 배운점과 시행착오 등을 적었다.

(2) 섹션2. Hello World

섹션 2에서는 기본적인 단축키와 프로그램 실행 방법에 대해 배웠다.
그 중에서도 psvm이라는 단축키가 있었는데 psvm을 입력하고 엔터를 누르면 static void main(String[] args) {}가 자동으로 입력된다.

psvm -> static void main(String[] args) {}

여태까지 배웠던 파이썬이나 자바 스크립트 같은 경우에는 위와 같은 것을 입력하지 않아도 위에서부터 자동으로 코드가 실행되었는데 자바는 psvm을 입력하고 시작해야 한다는 점에서 차이를 느꼈다.

psvm을 입력하면 자동으로 static void main(String[] args) {}가 나와야 하는데 내가 설정을 잘못했는지 static void main() {} 이런 코드가 나와서 당황했다.

문제점 1.
psvm -> static void main() {} (x)
=> file -> setting -> Live templates -> psvm -> Expand with Tab으로
설정변경

static void main() {}로 두고 코드를 써도 잘 작동되길래 그냥 둬도 되나 하는 생각에 쳇 gpt에게 물어보았다.

🧠 왜 static void main()인데도 실행됐냐

IntelliJ는 똑똑해서 👇

👉 “main 비슷한 거 있네?”
👉 “그냥 실행해줄게~”

이렇게 자동으로 실행 진입점 만들어줌

✔️ 즉
static void main() {
}

👉 ❌ 정식 자바 규칙 아님
👉 ✔️ IDE가 봐준 것

위와 같은 답변을 들을 수 있었다.
답변을 들으니 앞으로를 위해서 이 문제를 해결해야겠다는 생각이 들었다.

file -> setting -> Live templates -> psvm -> Expand with Tab
위처럼 설정을 변경하여 해결할 수 있었다.

(3) 섹션6. 반복문

섹션 6에서는 프로그램 개발시 코드작성을 줄이기 위해 필수적인 반복문을 배웠다.

문제점 2.
나에게는 굉장히 안좋은 습관이 하나 있는데 하나를 습득해서 그게 익숙해지면 다른 효율적인 것이 나타나도 기존의 것을 고수하는 것이다.

비효율적이더라도 조금 더 움직이는 것이 새로운 걸 배우고 익숙해지는 것보다 쉽다는 생각을 하는 것 같다.
하지만 장기적으로 보면 버리게 되는 시간은 비효율적인 기존의 방식을 고집했을 때가 훨씬 클 것이다.

이번에도 while문을 배우고 for문을 배우려고 보니 어차피 수행하는 역할은 똑같은데 그냥 건너뛰고 다음에 들을까 하는 생각이 들었다.

시시각각 트렌드가 변화하고 발전하는 지금 특히 개발자를 희망하는 사람이 이런 습관을 가지고 있는 것은 내가 생각했을 때 매우 좋지 않다..
이 생각이 들자마자 지금이라도 이런 습관을 빨리 없애버리고 싶어서 다른 섹션보다 이 섹션을 훨씬 공을 들여서 공부했던 것 같다.

while vs for

앞서 말했듯 둘은 수행하는 역할에 있어서는 차이가 거의 없다.
섹션6 초반에는 위에서 말했듯 while이 비효율적인 기존의 것이고 for가 발전된 형태인줄 알았는데 배우고 보니 그건 아니라는 것을 알게 되었다.
둘다 개발시 많이 사용되는 코드이고 각자 맞는 상황이 있다.

while(조건){}

for(초기식; 조건; 증감식){}

for문은 한번에 초기식과 조건, 증감식을 모두 볼 수 있어 가독성이 좋다는 장점이 있다.
더불어 for문 안에서만 초기식이 사용되기 때문에 변수를 신경쓰지 않아도 된다.
반면 while문은 while문 바깥에 선언해야 하기 때문에 scope가 넓어지고 메모리 사용이 커진다.
만약 반복문 안에서만 변수가 사용된다면 메모리를 과도하게 크게 사용하는 것이 된다.
하지만 반복횟수가 명확하지 않고 변화가 다양하다면 while문이 더 적절하다.

반복횟수가 정해짐 -> for
반복문 안에서만 초기식이 사용됌 -> for
변화가 다양함 -> while

2. 아기사자 명단 만들기

(1) 만드는 과정

아래는 최종적으로 만든 프로그램이다.

package lion;

import java.util.Scanner;

public class Week1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while(true){
            System.out.print("저장할 아기사자의 수를 5이상 입력하세요: ");
            int number = scanner.nextInt();
            scanner.nextLine(); // 버퍼 비우기

            if (number < 5){
                System.out.println("[오류!] 올바르지 않은 숫자입니다.");
                continue;
            }

            String[] names = new String[number];

            // 이름 입력
            for(int i = 0; i < number; i++){
                System.out.print((i+1) + "번째 아기사자의 이름을 입력해주세요: ");
                names[i] = scanner.nextLine();
            }

            // 출력
            System.out.println("\n최종 출력된 아기사자 명단입니다.");
            for(int i = 0; i < number; i++){
                System.out.println((i+1) + ". " + names[i]);
            }

            break; // 한번 실행 후 종료
        }

        scanner.close();
    }
}
  1. 사람 수를 입력받기
    값을 입력받기 위해 Scanner를 사용하여 int number에 값을 저장했다.
    이때 사람 수를 5보다 작게 설정할 경우 재입력을 받기 위해
    if문을 사용하여 조건을 (number<5)로 설정하였다.

  2. 이름을 사람 수만큼 입력받기
    숫자가 5이상 입력되었다면 이름을 사람 수 만큼 입력받기 위해 for문을 사용하였다. while을 사용해도 되지만 강의에서 수업을 들었듯 코드를 간결하고 보기 쉽게 만들기 위해 for문을 사용했다.

    문제점 3.
    사람 수를 적고 엔터를 누르니 첫번째 이름 입력이 스킵되었다.

    => nextInt(); 다음줄에 nextLine();을 사용하여 엔터를 비운다

오류를 보자 반복문 강의에서

int number = scanner.nextInt();
String name = scanner.nextLine();

실행시 scanner.nextInt();가 숫자만을 가져가고 엔터는 그대로 남긴다고 하는 것이 떠올랐다.
그래서 다음 실행인 scanner.nextLine으로 넘어가면 엔터값이 남아있어 그대로 첫 번째 입력을 건너뛰게 된다.

int number = scanner.nextInt();
            scanner.nextLine(); // 버퍼 비우기

이를 방지하기 위해 nextInt(); 다음 줄에 nextLine();을 사용하여 엔터값을 없애주어야 한다.

  1. 명단 출력하기
    입력받은 모든 이름을 확인하기 위해 for문을 사용하여 배열에 저장된 데이터를 순서대로 출력하였다.
    각 이름 앞에는 번호를 붙여 (i+1) 형태로 출력함으로써 보다 가독성있는 형태의 명단을 제공하였다.

(2) 결과

(3) 소감

바로 최근에 들었던 강의를 토대로 프로그램을 만들어보니 직접 문제를 풀고 있다는 성취감을 얻을 수 있어서 좋았다.
또한 복습이 되어 더욱 확실히 머릿속에 기억될 것 같다는 느낌이 든다.
열심히 공부하다보니 점점 재미를 붙이게 되는 것 같아 다행이라는 생각이 든다.
혼자 학원을 다닐 때보다 같이 일주일에 한번 있는 스터디를 위해 공부를 하는 지금이 훨씬 재미있고 발전하는 기분이다.
앞으로 있을 과제도 지금처럼만 열심히 하자!!!!!!

(과제인데 너무 일기형식으로 적은 것은 아닐까 걱정이 조금 된다ㅜㅜ)

4개의 댓글

comment-user-thumbnail
2026년 3월 23일

psvm이 설정으로 바꿀 수 있는 지는 저도 오늘 처음 알았어요 !! 시작부터 엄청 당황스러우셨을 것 같은데 잘 해결하셨네요 !! 자바와 자바스크립트는 완전 다른 언어라 ㅠㅠ 경기도 광주랑 전라도 광주 같은 느낌이에요 이름은 비슷한데 완전 달라요 !! 벨로그 정말 잘 작성해주셨고 원래 이렇게 회고록이 일기같은 느낌이 강해요 ! 수고하셨어요 ~~

답글 달기
comment-user-thumbnail
2026년 3월 23일

트러블슈팅을 너무 잘 작성해주신 것 같아요 !! 저도 앞으로 이렇게 마주친 문제와 해결과정을 작성해보아야겠슴니다!

답글 달기
comment-user-thumbnail
2026년 3월 23일

자칫하면 그냥 지나갈 수 있는 pvsm을 가지고 추가로 궁금해 따로 찾아본 탐구력!! 대단합니다..ㅎ.ㅎ 한번에 코드를 올린게 아니라, 코드를 짜보면서 발생하는 문제점과 과정을 자세히 서술해주셔서 같이 코드를 짜보는 느낌이 들었습니다. 저도 혼자 하는 공부보단 다같이 하는 스터디가 좋은 것 같아요. 같이 스터디 열심히 해봐요!!

답글 달기
comment-user-thumbnail
2026년 3월 23일

OT를 못 와서 과제 진행에 있어 어려운 점이 많았을텐데, 꼼꼼하게 잘하신 것 같아요! 문제점을 정리해서 어떻게 해결했는지를 직관적으로 볼 수 있도록 작성한 부분도 좋았습니다. 수고하셨어요!

답글 달기