본문 바로가기
스파르타 내일배움캠프/TIL(Today I learned)

25.02.25 TIL - Java 변수, 입출력, 연산자

by pandastic 2025. 2. 25.
반응형

 

목차

     

    1. Chapter 1 - 4 : 변수 (Variable)

    수업 목표

    변수(Variable)에 대해서 학습합니다.
    자료형(Data type)이 무엇인지 학습합니다.
    형변환(Casting)이 무엇인지 학습합니다.

    1. 변수

    - 데이터를 컴퓨터에 저장하기 위한 공간.

    - Java에서 데이터를 활용하고 보관하기 위해 변수에 담아 관리함.

     

    * 변수의 구조

       [자료형][변수이름][세미콜론] 

       Ex) int a;

     

    * 세미콜론(;)

       - Java에서 문장을 끝내는 마침표.

       - 문장이 끝났다는 것을 컴퓨터에 알려주며 세미콜론이 없으면 오류가 발생함.

     

    * 변수 이름 규칙

       - 프로그램의 유지 보수를 위해 올바른 변수명을 잘 지켜서 사용해야함.

       - 가독성을 위해 카멜케이스 권장.

       - 명사 형태로 사용하는 것이 좋음.

       - 특수 문자는 사용하지 않는 것이 좋음.

    규칙 나쁜 예시 좋은 예시
    숫자로 시작할 수 없음 ❌ 1stCar ✅ car1
    공백 사용 불가 ❌ my car ✅ myCar
    예약어 사용 불가 ❌int, ❌class, ❌true  
    특수문자는 (_, $ )사용가능    

     

     

    * 변수 활용

       1. 변수 선언

            ■ "변수를 선언한다" : 데이터 저장 공간을 만드는 것.

    int a;
    int b;

     

     

        2. 변수에 값 할당

            ■ 선언된 a 변수에 값을 할당.

    // a 는 변수 이름(Variable)
    // 1은 리터럴(literal)
    a = 1;

     

     

        3. 선언과 동시에 값 할당

            ■ 변수를 선언하면서 동시에 값을 할당. 

    int c = 3;

     * 초기화(initialization) : 처음으로 데이터 초기값을 설정하는 것.

     

     

        4. 기존 변수에 데이터 재할당(reassign)

            ■ 변수는 재사용 가능.

            ■ 기존 변수에 값을 재할당 시, 값이 덮어씌워짐.

    c = 4; //(1)
    c = 5; //(2)
    c = 6; //(3)

      C의 값은 6이 됨.

     

        5. 변수에 변수를 할당

            ■ 변수에 직접 미리 선언된 변수를 할당 가능.

            ■ 데이터가 복사되어 할당되는 것.

    int d = 1;
    int e = d;
    d = 10;
    System.out.println("e = " + e); // 정답 1

     

     

    2. 자료형(Data Type)

        - 메모리를 사용하는 단위.

        - 자료형은 데이터의 크기를 결정하는 규칙.

        - 변수 이름으로는 데이터의 위치를 표현하고, 자료형으로는 데이터의 크기 표현.

     

    자료형 종류 범위 바이트 비트
    boolean 논리형 true/false 1 8
    char 문자형 0 ~ 65535 유니코드 값 2 16
    byte 정수형 -128 ~ 127 1 8
    short 정수형 -32,768 ~ 32,767 2 16
    int 정수형 -2,147,483,648 ~ 2,147,483,647 4 32
    long 정수형 -9,233,372,036,854,775,808 ~ 9,233,372,036,854,775,807 8 64
    float 실수형 약 소수점 6~7자리까지 4 32
    double 실수형 약 소수점 15~17자리까지 8 64

     

    * float와 double의 형 범위를 "약" 이라고 표현한 이유

       - IEEE 754 부동소수점 표현 방식 때문. Java의 float 와 double은 2진수 기반의 부동소수점으로 저장되며, 이는 10진수에서 정확한 자릿수를 보장하지 못하는 경우가 있기 때문.

     

    * 변수의 선언과 메모리 할당

       - 컴퓨터에서 메모리는 1바이트 주소로 관리됨.

       - 변수 이름으로 데이터의 위치를 나타내고, 자료형으로 데이터의 크기를 나타냄.

    int a = 10; // 4 바이트 크기의 a 변수에 정수형 데이터 10을 넣어 초기화.
    int b; // 4바이트 크기의 b 변수에 어떤 값이 저장되 있는지 알 수 없음.

     

    [실습]

    package chapter1.variable;
    public class Main {
        public static void main(String[] args) {
            
            // [자료형] [변수명];
            int a;
            a = 1;
            a = 2;
            //sout = System.out.println()
            //soutv -> 위에 선언한 변수를 바로 출력문 작성해줌.
            System.out.println("a = " + a);
        }
    }

    // 논리형
    boolean booleanBox = true;
    System.out.println("booleanBox = " + booleanBox);

     

    3. 형변환(Casting)

        - 변수의 자료형을 다른 자료형으로 변경하는 것.

        - 업캐스팅(UpCasting)

        - 다운캐스팅(DownCasting)

    형 변환 종류 형변환 방식 자동 형 변환 여부 설명
    다운캐스팅(DownCasting) 명시적(Explicit) 큰상자 → 작은상자
    업캐스팅(UpCasting) 묵시적(Implicit) 작은상자 → 큰상자

     

     

    * 다운캐스팅(DownCasting)

      - 명시적 형변환(Explicit Casting)

      - 큰 데이터를 작은 상자에 넣어야하기 때문에 강제로 형 변환 시켜야함.

      - 강제로 형 변환 시, 명시적(int)로 변환시켜야함.

      - 큰 데이터를 작은 상자에 넣었기 때문에 데이터 손실 발생.

     

    // 다운캐스팅 : 큰 데이터 -> 작은 상자
    //변환할 자료형을 변수명 앞에 () 혈태로 넣어주기.
    // 큰 데이터를 작은 상자에 넣는 과정에서 데이터 손실 발생 가능.
    double bigBox = 10.123;
    int smallBox = (int)bigBox; // ✅ int <- double 명시적변환
    System.out.println("smallBox = " + smallBox); // ✅ 출력: 10 !데이터손실발생!

     

    * 업캐스팅(UpCasting)

       - 묵시적 형 변환(Implicit Casting)

       - 작은 데이터를 큰 상자에 옮겨담는 것.

       - 문제가 발생하지 않기 때문에 자동으로 변경됨.

       - 데이터 손실 없음.

    int smallBox = 10;
    double bigBox = smallBox;   // ✅ double <- int 자동형 변환
    System.out.println(bigBox); // ✅ 출력: 10.0

     

     

    * 실무에서 자주 활용되는 변수 종류(중요)

     

    1. 문자열 표현

       ■ 문자열 자료형의 첫글자는 대문자.

       ■ " "로 문자열 데이터를 나타냄.

    String stringBox = "문자열을 표현할 수 있습니다.";

           

    문자 VS 문자열

    char a = 'a';
    String str = "abc";

     

    2. 정수 표현

    int intBox = 1;
    long longBox = 1;

     

    3. 논리 표현

    boolean booleanBox = false;

     

     

    [퀴즈]

    더보기

    💬 Q1. 변수 이름으로 사용할 수 없는 것은?

    1. true
    2. car123
    3. myCar
    4. _car

    ✅ 1. ‘true’

    Java의 예약어(‘true’, ‘int’, ‘if’, ‘class’ 등)는 변수 이름으로 사용할 수 없습니다.

     

     

    💬 Q2. 변수 이름을 만들 때 올바른 규칙은?

    1. 변수 이름은 숫자로 시작할 수 있다.
    2. 변수 이름에는 공백(띄어쓰기)이 포함될 수 있다.
    3. 변수 이름에는 특수문자(@, #, !) 를 사용할 수 있다.
    4. 변수 이름은 영문자, 숫자, 언더스코어(_), $만 사용할 수 있다.

    ✅ 4. 변수 이름은 영문자(a-z, A-Z), 숫자(0-9), _, $만 사용 가능

    숫자로 시작할 수 없음! ❌ → 1stPlace (오류!)

    띄어쓰기 포함 불가! ❌ → my car (오류!)

    특수문자 사용 불가! ❌ → @car, car#name, speed!limit (오류!)

     

     

    💬 Q3. 다음 중 변수 이름으로 사용해도 되는 것은?

    1. myVariable
    2. int
    3. 1stPlace
    4. hello-world

    ✅ 1. myVariable

    변수이름은 첫글자는 소문자 그리고 카멜케이스를 사용을 권장합니다.

     

     

    💬 Q4. 같은 이름을 가진 변수를 같은 중괄호{} 안에 생성할 수 있을까요?

    ❌ 같은 중괄호{} 안에서 불가능

    {
        int number = 10;
        int number = 20// 오류! 같은 블록에서 같은 이름의 변수 선언 불가
    }

     

    ✅ 해결 방법: 변수명을 다르게 하거나, 값을 바꿀 때는 =를 사용!

    {
        int number = 10;
        number = 20; // 올바른 코드 (값만 변경)
    }

     

    Q5. 다음 변수 선언이 잘못된 것들은?(여러 개 선택)

    a. int num = 10;
    b. double price = 19.99;
    c. String name = 'Steve';
    d. boolean isAvailable = "true";
    e. char grade = 'AB';

     

    ✅ c. String 문자열 자료형 변수에는 쌍따옴표 "" 를 값에 사용해야합니다.

    String name = "Steve";

     

    ✅ d. boolean 은 “true” 문자열 데이터를 저장할 수 없습니다.(쌍따옴표는 문자열)

    boolean isAvailable = true;

     

    ✅ e. char 캐릭터 자료형 변수에는 문자 하나만 저장할 수 있습니다.

    char grade = 'A';

     

     

     

    2. Chapter 1 - 5 : 입출력 - 프로그램과 사용자 간의 대화

    수업 목표

    입력과 출력 개념을 학습합니다.
    입력과 출력 방법을 학습하고, 실습해 봅니다.

    1. 입출력

    1. 출력(Output)

       - 컴퓨터가 결과를 콘솔화면에 보여주는 것.

    System.out.println("안녕하세요!");

     

    * 출력 방법

      1. 출력 후 자동으로 줄 바꿈

    System.out.println("Hello");
    System.out.println("Java!");
    
    // 출력결과:
    Hello
    Java!

     

    2. 줄 바꿈 없이 출력

    System.out.print("Hello");
    System.out.print(" Java! ");
    
    // 출력결과:
    Hello Java!

     

    * 개행문자 ( \n )

       - 줄바꿈을 의미하는 문자.

       - 개행문자 출력 시 줄바꿈 기능 수행.

    System.out.println("Hello\nWorld!");
    
    // 출력결과:
    Hello
    World!

     

    * 출력방법 정리

    출력 방법 설명
    System.out.print() 줄 바꿈 없이 출력
    System.out.println() 출력 후 줄 바꿈

     

     

    2. 입력(Input)

       - 데이터를 읽을 때 객체(Scanner) 사용.

       - 출력 시에도 객체를 사용하는데, System이 출력을 도와주는 객체.

     

    * 입력방법

    1. Scanner 객체 소환

    Scanner scanner = new Scanner(System.in);

     

     

    2. 문자열 입력받기

    scanner.nextLine();

     

     

    3. 숫자 입력받기

    scanner.nextInt()
    scanner.nextDouble()
    scanner.nextLong()

     

     

    [퀴즈 및 실습과제]

    더보기

    Q1. 다음 코드의 출력 결과는?

    System.out.println("Java\nis\nfun!");

    A)

    Java
    is
    fun

    \n 은 개행문자임으로 각 단어가 한 줄씩 출력 됩니다.

     

     

    [실습과제]

    package chapter1.io;
    import java.util.Scanner;
    public class UserInfoPrinter {
        public static void main(String[] args) {
            // TODO: 사용자로부터 이름을 입력받기
            Scanner scanner = new Scanner(System.in);
            System.out.print("이름을 입력하세요: ");
            String name = scanner.next();
            // TODO : 사용자로부터 나이를 입력받기
            System.out.print("나이를 입력하세요: ");
            int age = scanner.nextInt();
            // TODO : 입력받은 값 출력
            System.out.println("출력 결과: ");
            System.out.println("이름: " + name);
            System.out.println("나이: " + age);
        }
    }

     

    3. Chapter 1 - 6 : 연산자 - 계산의 시작

    수업 목표

    ● 연산자가 무엇인지 학습합니다.
    연산자의 우선순위를 학습합니다.
    문자열을 비교하는 방법을 학습합니다.

    1. 산술 연산자

        1) 기본적인 사칙 연산

    int a = 10;
    int b = 3;
            
    // 기본 사칙연산
    int sum = a + b;
    System.out.println("sum = " + sum);
            
    int sub = a - b;
    System.out.println("sub = " + sub);
            
    int mul = a * b;
    System.out.println("mul = " + mul);

     

     

        2) 기본적인 사칙 연산

              - 정수끼리 나누게 되면 소수점이 버려짐.

              - 소수점을 유지하려면 소수점과 연산시켜야함.

    int a = 10;
    int b = 3;
    ...
    int div = a / b;
    System.out.println("div = " + div); // ⚠️ 3 (소수점 버려짐)
            
    double div2 = a / 3.0;
    System.out.println("div2 = " + div2); // ✅ 3.333... (소수점 유지)

     

     

        3) 모듈러 연산자(나머지 연산)

              - 모듈러(%) 연산자는 나머지를 구할 때 유용함.

    int mod = 10 % 3;
    System.out.println("mod = " + mod); // 나머지: 1
    int mod2 = 15 % 4;
    System.out.println("mod2 = " + mod2); // 나머지: 3
    int mod3 = 20 % 7;
    System.out.println("mod3 = " + mod3); // 나머지: 6

     

    * 모듈러 연산의 활용

       - 시간 연산

    (10 + 5) % 12 = 3

     

        - 짝수/홀수 판별

    6 % 2 = 0; // 짝수
    7 % 2 = 1; // 홀수

     

     

    2. 대입 연산자

        1) 대입 연산자(=)

             - 변수에 값을 할당할 때 사용.

             - 연산자 중에 제일 마지막에 수행됨.

     

        2) 복합 대입 연산자(+=, -=, *=, /=, %=)

             - 누적값을 구할 때 자주 활용됨.

             - num이 5일 때 num += 3; 의 의미는 num = num + 3; 임.

             - num + 3 이 먼저 연산되고 대입됨.(대입 연산자는 제일 마지막에 수행!)

     

     

    3. 증감 연산자

        1) 증감연산자의 활용

           ■ 변수를 1 증가(++) 또는 1 감소(--) 시킬 때 사용.

            ■ 전위 연산(++i) 과 후위 연산(i++)의 차이가 있기 때문에 개념을 정확히 이해하는 것이 중요.

            ■ 전위연산은 연산 후 사용.

            ■ 후위연산은 사용 후 연산.

     

         2) 전위 연산 VS 후위 연산

            ■ 전위 연산(++i)

                - 연산 후 값이 사용됨.

    int a = 5;
    System.out.println("++a: " + (++a));  // 6 (먼저 증가 후 출력)
    System.out.println("현재 a 값: " + a);  // 6

     

            ■ 후위 연산(i++)

                - 값이 사용된 후 연산됨.

    int b = 5;
    System.out.println("b++: " + (b++));  // 5 (출력 후 증가)
    System.out.println("현재 b 값: " + b);  // 6

     

     

    4. 비교 연산자

        1) 같음 연산자(==)

            ■ 두 값이 같으면 true, 다르면 false를 반환.

    System.out.println("10 == 10: " + (10 == 10)); // true

     

        2) 다름 연산자(!=)

            ■ 두 값이 다르면 true, 같으면 false를 반환.

    System.out.println("10 != 5: " + (10 != 5)); // true

     

        3) 크기 비교 연산자(>, <, <=, >=)

            ■ 양쪽의 값을 비교했을 때 논리에 맞으면 true 반환.

            ■ 논리에 어긋나면 false 반환.

    System.out.println("10 < 5: " + (10 < 5)); // false
    System.out.println("10 >= 10: " + (10 >= 10)); // true
    System.out.println("10 <= 5: " + (10 <= 5)); // false
    연산자 설명 예제 결과
    == 두 값이 같으면 true 10 == 10 true
    != 두 값이 다르면 true 10 != 5 true
    왼쪽 값이 크면 true 10 > 5 true
    왼쪽 값이 작으면 true 10 < 5 false
    >= 왼쪽 값이 크거나 같으면 true 10 >= 10 true
    <= 왼쪽 값이 작거나 같으면 true 10 <= 5 false

     

     

    5. 논리 연산자

        1) AND 연산자(&&)

            ■  두 조건이 모두 참일 때 true 반환.

     

        2) OR 연산자(||)

            ■ 둘 중 하나라도 참이면 true 반환.

     

        1) NOT 연산자(!)

            ■  true일 때 false로, false일 때 true로 변경함.

     

    연산자 설명 예제 결과
    && (AND) 조건이 모두 참일 때만 true true && true true
    true && false false
    false && true false
    || (OR) 하나라도 참이면 true true || true true
    true || false true
    false || true true
    false || false false
    ! (NOT) 참이면 거짓, 거짓이면 참으로 변경 !true false
    !false true

     

    6. 연산자 우선순위

        - 우선순위가 헷갈린다면 괄호()를 적극적으로 사용할 것.

     

    1. 산술 연산자 우선순위

        -  기본적인 수학 사칙연산 우선순위 적용.

     

    2.  기본 연산자 우선순위

         - 산술 → 비교 → 논리 → 대입.

     

    3. 비교 연산자와 산술 연산자의 우선순위

        - 산술 → 비교

     

    4. 논리 연산자 우선순위

         - ! 가 제일 먼저 연산되고, 두번째로 &&, 마지막으로 ||

     

     

    * 문자열 비교

       - 실무에서 문자열을 비교할 때 == 를 사용하는 경우는 거의 없음.

       - 문자열 비교는 항상 .equals() 를 활용할 것! (동등성/동일성 문제)

       - == 는 문자열 값을 비교하는 것이 아니라 메모리 주소를 비교하는 방식이기 때문

     

     

    [실습 과제]

    더보기

    💬 Q1. 산술 연산자 문제

    두 개의 정수 a 와 b 가 주어졌을 때 두 수의 합, 차, 곱, 나누기 결과를 변수에 저장하는 출력하는 프로그램을 작성하세요.(%모듈러 연산도 포함하세요)

    public class Main {
        public static void main(String[] args) {
            int a = 15; // 값 할당 필요
            int b = 4; // 값 할당 필요
            // 1. 더하기
            // 1. 더하기 결과 출력
            int sum = a + b;
            System.out.println("덧셈 결과: " + sum);
            // 2. 빼기
            // 2. 빼기 결과 출력
            int sub = a - b;
            System.out.println("뺄셈 결과: " + sub);
            // 3. 곱하기
            // 3. 곱하기 결과 출력
            int mul = a * b;
            System.out.println("곱셈 결과: " + mul);
            // 4. 나누기
            // 4. 나누기 결과 출력
            int div = a / b;
            System.out.println("나눗셈 결과: " + div);
            // 5. 모듈러
            // 5. 모듈러 결과 출력
            int mod = a % b;
            System.out.println("나머지 결과: " + mod);
        }
    }

    정답)

    public class Main {
        public static void main(String[] args) {
            int a = 15;
            int b = 4;
            int sum = a + b;
            int difference = a - b;
            int product = a * b;
            int quotient = a / b;
            int remainder = a % b;
            System.out.println("덧셈 결과: " + sum);
            System.out.println("뺄셈 결과: " + difference);
            System.out.println("곱셈 결과: " + product);
            System.out.println("나눗셈 결과: " + quotient);
            System.out.println("나머지 결과: " + remainder);
        }
    }

     

    💬 Q2. 비교 연산자 문제

    두 개의 정수 x와 y가 주어졌을 때

    • x가 y보다 큰지 (>)
    • x가 y보다 작은지 (<)
    • x와 y가 같은지 (==)
    • x와 y가 다르면 (!=)각각의 결과를 변수에 저장하고 출력하는 프로그램을 작성하세요.
    public class Main3 {
        public static void main(String[] args) {
            int x = 5;
            int y = 7;
            System.out.println("x가 y보다 큰가? " + (x > y));
            System.out.println("x가 y보다 작은가? " + (x < y));
            System.out.println("x가 y와 같은가? " + (x == y));
            System.out.println("x가 y와 다른가? " + (x != y));
        }
    }

     

    정답)

    public class Main {
        public static void main(String[] args) {
            int x = 10;
            int y = 20;
            boolean isGreater = x > y;
            boolean isSmaller = x < y;
            boolean isEqual = x == y;
            boolean isNotEqual = x != y;
            System.out.println("x가 y보다 큰가? " + isGreater);
            System.out.println("x가 y보다 작은가? " + isSmaller);
            System.out.println("x와 y가 같은가? " + isEqual);
            System.out.println("x와 y가 다른가? " + isNotEqual);
        }
    }

     

     

    💬 Q3. 두 문자열이 같은지 비교할 수 있는 프로그램을 만들어 봅시다.

    입력한 두 개의 문자열 str1과 str2 을 비교한 결과를 result 에 담아서 출력하세요.

    • 두 문자열이 같은지 비교할 때 활용 (.equals())

     

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.print("첫 번째 문자열을 입력하세요: ");
            String first = sc.nextLine();
            System.out.print("두 번째 문자열을 입력하세요: ");
            String second = sc.nextLine();
            boolean result = first.equals(second);
            System.out.println("두 문자열이 같은가요?" + result);
        }
    }

     

    정답)

    import java.util.Scanner;
    public class StringComparison {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            // TODO: 사용자로부터 첫 번째 문자열 입력받기
            System.out.print("첫 번째 문자열을 입력하세요: ");
            String str1 = scanner.nextLine();
            // TODO: 사용자로부터 두 번째 문자열 입력받기
            System.out.print("두 번째 문자열을 입력하세요: ");
            String str2 = scanner.nextLine();
            // TODO: 문자열 비교 결과를 변수 result 에 저장
            boolean result = str1.equals(str2);
            // TODO: 결과 출력
            System.out.println("두 문자열이 같은가요? " + result);
        }
    }
    반응형