멋사 Backend 7일차 🦁

신재원·2023년 4월 25일

💪 Java

🎯 String의 substring(), split(), hasCode()

📌 substring(int beginIndex, int endIndex)

  • beginIndex 위치에서 시작하여, endIndex 의 전 위치 까지 자릅니다.

  • 😎 Index는 0부터 시작합니다

    예를 들어

    String gold = "GOLD";
    "G" = 0 번째 Index, "L" = 2 번째 Index 인것입니다.

public class Main {
    public static void main(String[] args) {
        String gold = "GOLD";
        String g = "G";

        String goldSub1 = gold.substring(0, 1); // "G"
        String goldSub2 = gold.substring(1, 3); // "OL"
        
        System.out.println(g == goldSub1); // false
        System.out.println(goldSub2); // OL
        
    }
}
실행결과
false
  • == 비교는 주소값을 비교, .equals() 는 값 자체를 비교 합니다.
    • g 랑 goldSub은 각자 다른 곳에서 왔다고 생각하면 편할것같습니다.
  • 실행 결과로 false가 나오는 이유는 멋사 6일차 대입/초기화 참고 하면 될것같습니다.

📌 split("특정 문자")

  • 문자열을 나누어 배열 (Array)에 저장하여 리턴합니다.
    • 이때 Index의 순서로 배열에 저장됩니다.
  • 아래의 예시처럼
    phoneNumber.split("-"); : - 라는 특정 문자를 기준으로 나눈다는 뜻입니다.
  • 이 외에도 공백, 쉼표, 등 다양하게 사용할수있습니다.
    phoneNumber.split(" ");, phoneNumber.split(",");
public class Main {
    public static void main(String[] args) {
        String phoneNumber = "010-1234-5678";
        String[] phoneNumberSplit = phoneNumber.split("-");


        System.out.println(phoneNumberSplit[0]); // 010
        System.out.println(phoneNumberSplit[1]); // 1234
        
        /**
        010 = 0번 Index
        1234 = 1번 Index
        5678 = 2번 Index
        **/
    }
}
실행결과
010
1234

📍 CSV (Comma Separated Value 쉼표로 구분된 값)

  • 오픈 API, 공공 API를 사용할때 쉼표를 기준으로 split()하여 많이 사용합니다.

📌 .hashCode()

hashCode()
객체의 주소값을 변환하여 생성한 고유의 정수 값이라 할수있습니다.

public class Main {
    public static void main(String[] args) {
        String gold = "GOLD";
        String g = "G";

        String goldSub1 = gold.substring(0, 1); // "G"
        
        System.out.println(g.hashCode()); // 71
        System.out.println(goldSub1.hashCode()); // 71
        System.out.println(g == goldSub1); // false;
    }
}
실행결과
71
71
false
  • 위의 코드와 같이 hashCode가 같다고 같은 메모리(주소)가 아닙니다.
  • 서로 다른 String 객체 문자열이 같다면 hashCode가 같은것입니다.
  • String은 heap에 저장되고 hash(해시)의 형태로 저장됩니다.
    대표적으로 hashMap (key, value)
    (hashCode가 같다고해서 같은 key 값으로 저장되지는 않습니다)

🐱‍🚀 1차원 배열

  • 다차원 배열은 추후에 뒤에서 다룰 예정입니다.

배열 (Array)
동일한 타입의 데이터(값)를 그룹화 하여 묶어준다고 생각하면 될 것입니다.

장점 : 불필요한 변수사용을 줄일수있으며, 반복문을 통해 손쉽게 사용가능합니다.

  • 배열 미사용시
public class Main {
    public static void main(String[] args) {
        int number1 = 1;
        int number2 = 2;
        int number3 = 3;
        
        System.out.println(number1);
        System.out.println(number2);
        System.out.println(number3);
    }
}
  • 배열 사용시

    • 배열을 초기화 할때는 "반드시" 크기 (갯수) 를 정의해야합니다.
    • 배열도 Index 순서로 저장됩니다.

    ( 0 부터 시작)

public class Main {
    public static void main(String[] args) {
        int[] number = new int[3]; // 배열 초기화, 크기를 3으로 정의
        
        // 크기 지정없이 값을 바인딩해서 크기를 만듬 
        String[] stringArr = new String[]{"Shin", "Jae", "Won"};

        // number 배열의 길이(length)만큼 반복(loop)합니다.
        for (int i = 0; i < number.length; i++) {
            System.out.println(number[i]);
        }

        for (int i = 0; i < stringArr.length; i++) {
            System.out.println(stringArr[i]);
        }
    }
}
실행결과
0
0
0
Shin
Jae
Won
  • 값을 정의하지않았는데 0으로 출력되는 이유?

int[] number = new int[3];

  • new 연산자 사용시 기본값으로 0이 할당됩니다.
  • 배열의 길이 구하는 방법 ?

int[] number = new int[3];
int size = number.length; // nunmber 배열의 길이인 3이 반환됩니다.

📍 진법 변환

public class Main {
    public static void main(String[] args) {
        int number = 25;

        // 25 -> 2진수로 변환
        System.out.println(Integer.toBinaryString(number)); // 11001
        System.out.println(Integer.toString(number, 2)); // 11001


        // 2진수를 10진수로 변환
        System.out.println(Integer.parseInt("11001", 2)); // 25
    }
}
Integer.toString(number, 2);
Integer.toString(입력 값, 바꾸고싶은 진법);
  • 10진수를 제외한 나머지 진법들은 String으로 반환된다.
  • 필요에 따라 8진법, 16진법을 찾아 사용해보면 될것 같습니다.

0개의 댓글