[Java] 변수 초기화에 대한 이해

2024. 11. 5. 17:12·공부/☕Java

문득 알고리즘 문제를 풀다 변수 초기화에 대해서 의문을 품게 되었었다.

 

(1) 문제 발생

import java.util.Scanner;

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

        int n = scanner.nextInt();
        int f = scanner.nextInt();

        int len = Integer.toString(n).length();
        String result = ""; // 의문을 갖게 된 부분
        String text = ""; // 의문을 갖게 된 부분
        for(int i = 0; i < 100; i++) {
            text = Integer.toString(n).substring(0, len - 2);
            if(i < 10) {
                result = "0" + i;
            } else {
                result = String.valueOf(i);
            }
            text += result;

            if(Long.parseLong(text) % f == 0) {
                break;
            }
        }
        System.out.println(result);
    }
}

* 해당 코드는 최종 제출 코드 이전의 코드이다.

인텔리제이 IDEA에서는 자동으로 코드 검사를 해주는 코드 인스펙션을 지원을 해준다.

자동 코드 검사를 통해 알게 된 사실은 result와 text라는 이름의 String 변수를 선언하는 부분에서 result는 변수를 초기화를 해주는게 맞다고 나왔고 text는 변수를 초기화 할 필요가 없다고 나왔다. 이 부분에서 의문을 갖게 되었다.

- 밑에 for문과 조건문에서 변수를 초기화 하고있는데? 굳이 변수를 초기화 해야할까?

 

궁금해서 result의 변수를 초기화 하지 않고 선언만 하고 코드를 쳐보니, 인스펙션이 컴파일 오류를 내뱉었다.

- 맨 밑에 출력문 변수에서 컴파일 오류를 내뱉고 있었다.

import java.util.Scanner;

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

        int n = scanner.nextInt();
        int f = scanner.nextInt();

        int len = Integer.toString(n).length();
        String result; // 의문을 갖게 된 부분
        String text; // 의문을 갖게 된 부분
        for(int i = 0; i < 100; i++) {
            text = Integer.toString(n).substring(0, len - 2);
            if(i < 10) {
                result = "0" + i;
            } else {
                result = String.valueOf(i);
            }
            text += result;

            if(Long.parseLong(text) % f == 0) {
                break;
            }
        }
        System.out.println(result);
    }
}

이 문제는 result와 text 변수 선언부에서 선언을 했지만 초기화를 하는 과정은 for문이나 if문과 같이 또 다른 스코프를 사용하고 있기 때문에, 해당 부분에서 초기화가 제대로 이뤄지지 않았을 때 출력문에는 무슨값이 출력이 될지 알 수 없기 때문에 내뱉는 오류이다.

 

컴파일러 입장

1. for 루프가 한 번도 실행되지 않을 수 있다.

2. if 조건문이 실행되지 않을 수 있다.

3. break문으로 인해 초기화가 안 될 수 있다.

 

(2) 문제 해결

해당 문제를 해결하기 위해서, result 변수를 for문과 if문 스코프에 넣어서 출력을하게 했다.

이런식으로 변수를 사용하게 된다면, 반드시 변수가 초기화가 된 이후에 이용을 할 수 있기 때문에 컴파일 오류 없이 코드를 실행할 수 있게 된다.

import java.util.Scanner;

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

        int n = scanner.nextInt();
        int f = scanner.nextInt();

        int len = Integer.toString(n).length();
        String result;
        String text;
        for(int i = 0; i < 100; i++) {
            text = Integer.toString(n).substring(0, len - 2);
            if(i < 10) {
                result = "0" + i;
            } else {
                result = String.valueOf(i);
            }
            text += result;

            if(Long.parseLong(text) % f == 0) {
                System.out.println(result);
                break;
            }
        }
    }
}

 

(3) 결론

변수 초기화는 필수이다.

 

(4) 회고

매우 기본적인 내용이지만, 처음 배울때 그냥 그렇구나 하고 넘어갔던 부분을 지금 와서 곰곰히 생각해보니 이유를 찾을 수 있었고 기본기에 대한 이해도가 더욱 늘어난 것 같다.

 

해당 알고리즘 문제는 백준 문제이고 해결한 코드는 깃허브에 올라가 있습니다.

https://github.com/Hongjunbin/Algorithm/tree/main/%EB%B0%B1%EC%A4%80/Bronze/1075.%E2%80%85%EB%82%98%EB%88%84%EA%B8%B0

 

Algorithm/백준/Bronze/1075. 나누기 at main · Hongjunbin/Algorithm

[알고리즘] 백준 & 프로그래머스 문제 풀이. Contribute to Hongjunbin/Algorithm development by creating an account on GitHub.

github.com

 

 

'공부 > ☕Java' 카테고리의 다른 글

[Java] Java와 객체지향 프로그래밍이란?  (0) 2025.03.06
[Java Design Pattern] 정적 팩토리 메서드  (0) 2024.11.10
[Java] Annotation 이란? ( 애노테이션 )  (4) 2024.11.05
[Java] JVM 동작 원리  (2) 2024.10.23
[Java] 클래스와 객체의 정의  (9) 2024.10.05
'공부/☕Java' 카테고리의 다른 글
  • [Java] Java와 객체지향 프로그래밍이란?
  • [Java Design Pattern] 정적 팩토리 메서드
  • [Java] Annotation 이란? ( 애노테이션 )
  • [Java] JVM 동작 원리
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (233)
      • 방송통신대학교 (87)
        • ⚙️컴퓨터의 이해 (11)
        • 💻컴퓨터과학 개론 (15)
        • 🔢자료구조 (14)
        • 🧬알고리즘 (10)
        • ⚙️운영체제 (14)
        • 🕸️이산수학 (11)
        • 🌍유비쿼터스 컴퓨팅 (11)
        • 🖥️컴퓨터과학과 (1)
      • 공부 (72)
        • 📚백엔드 공부 (6)
        • ☕Java (23)
        • 🌳Spring (13)
        • ⚙️C (12)
        • ⚡Python (15)
        • JavaScript (1)
        • 🛢️Database (0)
        • Algorithm Problem Solving (2)
      • 네트워크 (7)
        • 📜HTTP (7)
      • 스파르타코딩클럽 (64)
      • 정보 (2)
      • 정리가 필요한 글 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    spring
    그래프
    배열
    컴퓨터의 이해
    자료구조
    컴퓨터과학 개론
    유비쿼터스
    운영체제
    Python
    함수
    C언어
    자바
    컴퓨터과학과
    알고리즘
    Java
    방송통신대학교
    이산수학
    방통대
    방송대
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
[Java] 변수 초기화에 대한 이해
상단으로

티스토리툴바