imhamburger 님의 블로그

자바(Java) - 자바기초, 전위형증감, 후위형증감, switch 사용방법 본문

끄적끄적

자바(Java) - 자바기초, 전위형증감, 후위형증감, switch 사용방법

imhamburger 2024. 10. 15. 09:05

자바는 파일 확장명인 .java인 파일을 생성하고 자바 언어로 코드를 작성한 후 이렇게 만든 자바 소스 파일을 javac 명령어로 컴파일해야 한다.

 

컴파일이 성공하면 확장명이 .class인 바이트 코드 파일이 생성된다.

 

컴파일 명령어

javac <파일명>.java

 

참고

javac -d bin src/<파일명>.java

 

  • 자바 소스 파일(App.java)을 컴파일하여 .class 파일을 특정 디렉터리(bin)에 저장하는 명령어이다.

 

컴파일이 가능하다면 당연히 디컴파일도 가능하다.

디컴파일 다운로드

 

디컴파일 패키지?를 다운로드한 후 아래 명령어로 실행하면 된다.

 

디컴파일 실행하기

java -jar jd-gui-1.6.6.jar

 

 

자바 기초익히기

 

1. String Copy

public class StringCopy {
    public static void main(String[] args) {
        String str = "안녕 자바";
        String strCopy = str;

        System.out.println("변경전 문자열 str: " + str);
        System.out.println("변경전 문자열 strCopy: " + strCopy);

        strCopy = "안녕 C";

        System.out.println("변경후 문자열 str:" + str);
        System.out.println("변경후 문자열 strCopy: " + strCopy);
    }
}

 

출력

 

 

2. String Share

public class StringShare {
    public static void main(String[] args) {
        String strA = "안녕 자바";
        String strB = "안녕 자바";
        String strC = new String("안녕 자바");
        String strD = new String("안녕 자바");

        System.out.println("문자열 리터럴: 문자열 리터럴 = " + (strA == strB));
        System.out.println("문자열 리터럴: new String = " + (strA == strC));
        System.out.println("new String: new String = " + (strC == strD));
        System.out.println("new String: new String = " + (strC.equals(strD)));
    }
}

 

출력

문자열 리터럴: 문자열 리터럴 = true
문자열 리터럴: new String = false
new String: new String = false
new String: new String = true

 

 

3. String Operation

public class StringOperation {
    public static void main(String[] args) {
        String str01 = "안녕";
        str01 = str01 + "자바";
        System.out.println("안녕 + 자바: str01 = " + str01);

        int num01 = 1;
        int num02 = 2;
        str01 = num01 + num02 + str01;
        System.out.println("안녕 + 자바 : str01 = " + str01);
    }
}

 

출력

안녕 + 자바: str01 = 안녕자바
안녕 + 자바 : str01 = 3안녕자바

 

 

str01과 num01 + num02 위치를 바꾼다면 어떻게 출력되지?

int num01 = 1;
int num02 = 2;
str01 = str01 + num01 + num02;
System.out.println("안녕 + 자바 : str01 = " + str01);

 

출력

안녕 + 자바: str01 = 안녕자바
안녕 + 자바 : str01 = 안녕자바12
  • str01 = str01 + num01 + num02; 이 줄에서 중요한 점은 자바에서 문자열과 숫자의 덧셈은 문자열 연결로 처리된다는 것

 

만약 "안녕자바3"으로 출력되길 원한다면?

str01 = str01 + (num01 + num02);

 

 

4. 자바 switch 사용하기

 

자바에서 switch 문은 하나의 변수를 여러 값과 비교하여 조건에 맞는 코드를 실행하는 제어문이다.

switch 문은 주로 조건이 여러 개일 때, if-else 문보다 더 간결하고 명확한 코드를 작성할 수 있게 해준다.

switch (expression) {
    case <pattern_1>:
    	<action_1> // value1과 expression이 일치할 때 실행되는 코드
        break;
    case <pattern_2>:
        <action_2> // value1과 expression이 일치할 때 실행되는 코드
        break;
    case <pattern_3>:
        <action_3> // value1과 expression이 일치할 때 실행되는 코드
        break;
    default:
        // 모든 case와 일치하지 않을 때 실행되는 코드
}

 

 

파이썬 match와 비교 (공식문서)

match subject:
    case <pattern_1>:
        <action_1>
    case <pattern_2>:
        <action_2>
    case <pattern_3>:
        <action_3>
    case _:
        <action_wildcard>

 

 

5. 전위형 증감? 후위형 증감?

  • ++num (전위형 증감): 값을 먼저 1 증가시키고, 그 다음에 사용 
  • num++ (후위형 증감): 값을 먼저 사용하고, 그 후에 1을 증가

 

전위형 증감 

public class ControlFor {
    public static void main(String[] args) {
        int index;
        int num = 0;
        System.out.println("========for 문 안에서 전위형 증감");
        for (index = 0; index < 5; index++) {
            num = ++num;
            System.out.println(String.format("i: %s, num: %s", index, num));
        }
    }
}

 

출력

=======for문 안에서 전위형 증감
i: 0, num: 1
i: 1, num: 2
i: 2, num: 3
i: 3, num: 4
i: 4, num: 5

 

후위형 증감

public class ControlFor {
    public static void main(String[] args) {
        int index;
        int num = 0;

        System.out.println("=======for문 안에서 후위형 증감");
        num = 0;
        for (int i = 0; i < 5; i++) { // 왜 num은 0일까?
            num = num++;
            System.out.println(String.format("i: %s, num: %s", i, num));
        }
   	}
}

 

출력

========for 문 안에서 후위형 증감
i: 0, num: 0
i: 1, num: 0
i: 2, num: 0
i: 3, num: 0
i: 4, num: 0

 

 

왜 num이 0으로 출력될까?

  • 후위형: 값이 "먼저 사용"되고 그 후에 증가하는 것. "먼저 사용되고 나중에 일어남" (사용 먼저, 증가 나중)

예시

int x = 10;

// 전위형
System.out.println(++x); // 출력: 11 (증가된 값 출력)
System.out.println(x);   // 출력: 11 (x는 이미 11로 증가된 상태)

// 후위형
int y = 10;
System.out.println(y++); // 출력: 10 (현재 값 출력 후 증가)
System.out.println(y);   // 출력: 11 (이제 1 증가된 상태)

 

따라서 위에 코드의 경우 num은 0부터 시작하고 num++ 여도 0이 된다.

그리고 다시 num 은 1 이 되야 하는데 이미 위에서 num = 0 이라고 값을 주었기 때문에 계속 "0"이 출력되는 것이다.

 

 

그럼 전위형처럼 num이 1씩 증가하게 하는 방법은?

public class ControlFor {
    public static void main(String[] args) {
        int index;
        int num = 0;

        System.out.println("=======for문 안에서 후위형 증감");
        num = 0;
        for (int i = 0; i < 5; i++) { 
            num++; //값을 num에 할당하지 않고 계속 증가시키기
            System.out.println(String.format("i: %s, num: %s", i, num));
        }
   	}
}

 

이렇게 num에 다시 값을 할당하지 않고 num++ 으로 주면 전위형과 같은 값이 출력이 된다.

=======for문 안에서 후위형 증감
i: 0, num: 1
i: 1, num: 2
i: 2, num: 3
i: 3, num: 4
i: 4, num: 5

 

 

다시 예시로보자면,

int num = 5;
int result = num++;

System.out.println(num);    // 6 출력
System.out.println(result); // 5 출력
  • 처음에 num은 5
  • num++은 먼저 num의 현재 값(5)을 사용. 이 값이 result에 저장
  • 그런 다음에 num이 1 증가되어 num은 6이 된다.