WIL-1_Java(1)

신경연·2023년 1월 26일
0

WIL

목록 보기
2/6

IDE는 인텔리제이를 이용했다. 이전까지 이클립스를 써왔는데, 단축키가 좀 다르기도 하고 여러가지로 많이 다른 것 같다. 깃이랑 연동되는 것도 신기하다.

사실 나는 알고리즘 공부를 통해서 java 언어를 익힌 타입이라서 그런지, 세세한 용어나 이런 것에 대해 모르는 것이 많았다. 이번 공부를 통해 많이 도움이 되었던 것 같다.

정리 방식은 공부하면서 새로웠던 것, 나중에 다시 보고 싶은 것 위주로 정리했다.

1.변수

1) 종류

용어를 잘 모르고 있었어서 가져왔다.

class Variable1_4 {
    static int classVal = 100; // 클래스 변수
    int instanceVal = 200; // 인스턴스 변수

    public static void main(String[] args) {
        int num; // 지역 변수
//        System.out.println("int = " + num); // Error 발생
        num = 300;
        System.out.println("int = " + num); // 300

        // 인스턴스 변수
//        System.out.println("instanceVal = " + instanceVal); // Error 발생
        Variable1_4 instance = new Variable1_4 (); // 인스턴스 변수 사용을 위해 객체 생성
        System.out.println("instanceVal = " + instance.instanceVal); // 200

        // 클래스 변수
        System.out.println("classVal = " + classVal);
        // 같은 클래스 내부는 바로 접근 가능
        

2) 상수 & 리터럴

final은 안익숙해서 익숙해지려고 가져왔다.
직접 써본적은 거의 없었던 것 같다.

		// final은 상수이다. 변환 x
        final int finalScore = 100;
        System.out.println("finalScore = " + finalScore);
//         finalScore = 90; // Error 발생

리터럴 새로 알게된 것들

		char ch = '\n'; // 개행문자(\n, \t 등) 가능!
        // char ch3 = ''; // Error 발생, 빈 문자 불가능

        byte val2 = 127; // int 와 같은 리터럴로 저장하지만 범위가 지정되어 있음! -128 ~ 127
        // 맨 앞자리는 음/양 표현, 나머지 7자리가 숫자 표현.

        // 리터럴 접두사 예제
        // int의 진수 표현
        int ob = 0b0101; // 2진수, 접두사 0b
        int ob2 = 0b101;
        System.out.println(ob);     // 5
        System.out.println(ob2);    // 5 같네.
        int i = 100; // 10진수
        int oct = 0100; // 8진수, 접두사 0
        int hex = 0x100; // 16진수, 접두사 0x

        long price = 2_147_483_648L; // _ 를 사용하여 숫자 표현 가능!
        // long l1 = 2_147_483_648; // Error 발생, int 범위를 넘었으니 L 접미사 필수!
        long l2 = 100; // int의 범위를 넘지 않으면 L 생략 가능!


        // 정수형의 경우 범위를 벗어나면 순환한다.
        // 부호있는 경우
        short sMin = -32768;

        // short 타입에서 최솟값 범위를 넘었을 때
        // sMin - 1 = 32767
        System.out.println("sMin = " + sMin);
        System.out.print("sMin - 1 = ");
        System.out.println((short)(sMin - 1));

        // 부호없는 경우
        char cMin = 0;

        // short 타입에서 최솟값 범위를 넘었을 때
        // cMin - 1 = 65535
        System.out.println("cMin = " + (int)cMin);
        System.out.print("cMin - 1 = ");
        System.out.println((int)(--cMin));
        
        // ""를 문자열로 표현하려면 \" 라고 써야한다.
        System.out.println("num + \"\" = " + num + "");
        
        // 문자열 결합 순서에 의한 차이 확인!
        String s3 = "" + 7 + 7;
        // "" + 7 + 7 => "7" + 7 => "7" + "7" = "77"

2. 연산자

1) 우선순위

  1. 산술 > 비교 > 논리 > 대입 : 대입은 제일 마지막에 수행됩니다.
  2. 단항(1) > 이항(2) > 삼항(3) : 단항 연산자의 우선순위가 제일 높습니다.
  3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행 방향은 왼쪽에서 오른쪽입니다.

수학을 배웠을 때부터 너무 당연하게 써왔던 대입연산자는,
가장 낮은 우선순위와 특이한 진행방향을 가진 특수한 연산자였다.

2) 자동형변환

형변환을 하는 이유는 주로 서로 다른 두 타입을 일치시키기 위해서인데, 형변환을 생략 하려면 컴파일러가 알아서 자동으로 형변환을 해야합니다.
따라서 표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없음으로 두 타입 중에서 표현 범위가 더 넓은 쪽으로 형변환됩니다.

이 예시가 잘 나타내 주고 있는 것 같다.

	String s3 = "" + 7 + 7;
	// "" + 7 + 7 => "7" + 7 => "7" + "7" = "77"

3) 삼항연산자

잘 활용할 수 있게 되고 싶어, 익숙해지기 위해 넣었다.

	int num1 = 5, num2 = 7;
	int result;

	result = num1 - num2 > 0 ? num1 : num2;
	System.out.println("두 정수 중 더 큰 수는 " + result + "입니다."); // 7

3. 조건문과 반복문

조건문과 반복문은 알고리즘에서 너무 많이 써서 익숙해져, 처음 보는 것이 다소 적었던 것 같다.

1) 이름 붙은 반복문

한번에 다중 반복문을 벗어날 때 쓰면 좋을 것 같다.
continue의 경우 첫 for문의 변수를 continue 하게 되는 것 같다.

		allLoop :
        for (int i = 2; i < 10; i++) {
            for (int j = 1; j < 10; j++) {
                if (i == 5) {
                    break allLoop;
                }
                System.out.println(i + " * " + j + " = " + (i * j));
            }
        }
        System.out.println();

        int i = 2;
        allLoop :
        while (true) {
            for (int j = 1; j < 10; j++) {
                if (i == 5) {
                    break allLoop;
                }
                System.out.println(i + " * " + j + " = " + (i * j));
            }
            i++;
        }
        System.out.println();

        allLoop : for (int k = 2; k < 10; k++) {
            for (int j = 1; j < 10; j++) {
                if (k == 5) {
                    continue allLoop;
                }
                System.out.println(k + " * " + j + " = " + (k * j));
            }
        }

4. 배열

1) String 배열

char[] 는 그대로 출력하면 문자열로 출력된다는 건 많이 써먹을 수 있을 것 같다.
String str = new String(chArr); 이거 엄청 좋아 보인다.

	char[] chArr = {'a', 'b', 'c', 'd'};
	String str = new String(chArr);
	System.out.println(chArr); // abcd 가 출력되는데 이는 println 메서드의 기능 때문!
	System.out.println(str);

substring

substring(int from, int to) : 문자열에서 해당 범위(from~to)의 문자열을 반환한다.(to는 포함 안됨)
한번 제대로 짚고 넘어가고 싶었는데, 이번에 제대로 익혀서 이제 범위 설정에서 헷갈리지 않을 수 있을 것 같다.

	String str = "ABCDEFG";

	String str2 = str.substring(1, 4);
	System.out.println("str2 = " + str2); // str2 = BCD

2) 다차원 배열

다차원 배열은 deep을 섞어서 써주나 보다.
Arrays.deepEquals 진짜 좋아보인다.
deepToString 이것도 디버깅할 때 좋을 것 같다.

String[][] strArr1 = {
                {"AAA","BBB","CCC"},
                {"aaa","bbb","ccc"},
                };
        
String[][] strArr2 = {
                {"AAA","BBB","CCC"},
                {"aaa","bbb","ccc"},
                };
        
// 1 차원 비교에는 equals
System.out.println("Arrays.equals(strArr1, strArr2) = " + Arrays.equals(strArr1, strArr2)); // false
// 다차원 비교에는 deepEquals
System.out.println("Arrays.deepEquals(strArr1, strArr2) = " + Arrays.deepEquals(strArr1, strArr2)); // true

3) 클론

.clone() 밖에 안써봤는데, 기회가 되면 쓸지도 몰라 가져와 보았다.

int[] arr2 = Arrays.copyOf(arr, arr.length);
System.out.println("Arrays.toString(arr2) = " + Arrays.toString(arr2));
int[] arr3 = Arrays.copyOf(arr, 3);
System.out.println("Arrays.toString(arr3) = " + Arrays.toString(arr3));
int[] arr4 = Arrays.copyOf(arr, 7); // 범위가 넘어가는 복사는 초기화값이 들어간다.
System.out.println("Arrays.toString(arr4) = " + Arrays.toString(arr4));
System.out.println();

// copyOfRange
int[] arr5 = Arrays.copyOfRange(arr, 2, 4);
System.out.println("Arrays.toString(arr5) = " + Arrays.toString(arr5));

4) 단축키

fori

for문을 작성해주는 인텔리제이의 단축키. 좋다.

iter

향상된 for문의 자동완성 단축키. 더좋다.

ctrl + d

현재 커서의 문장을 복사해서 바로 아래에 붙여준다.

profile
반갑습니다

0개의 댓글