본문 바로가기

development/Codestates

22.12.26 시작


사실 코드스테이츠 백엔드 부트캠프를 시작하면서부터 블로그에 배운 것을 정리하며 공부하면 좋겠다는 생각을 했지만, 11일이 지난 오늘에서야 드디어 행동으로 옮겼다. 미루지 않고 제때 행동하는 습관을 들여야겠다.

오늘은 Java 배열에 대해서 공부하고, 페어와 함께 연습문제를 풀며 진행했는데, 문제풀이에 예정된 시간을 초과하게 되었다.. 어렵다기 보다는 문법에 적응되지 않아서 실수하는 부분이 많은 것 같다.
하루종일 코드를 봤더니 머리가 복잡하다 ㅠㅜ 앞으로 자바를 많이 사용하게 될 것 같으니 익숙해지도록 노력해야겠다.


알게 된 것중에 기억에 남는 것은 먼저  isEmpty() 메소드.  문자열을 입력받을 때 equals()를 사용해서

if (str == null || str.equals("")) {
      return new String[]{};
    }

이런 식으로 빈 값이 들어오면 예외처리를 했는데, 레퍼런스 코드를 보니 isEmpty() 메소드를 써서 처리해놨길래,
isEmpty관련해서 검색하다보니 equals()를 사용해서 예외처리 하는 것이 기능적으로 낭비라는 글을 보았다.
해당 글을 요약하자면 

equals()는 내부적으로 복잡한 로직이 존재하기 때문에 다른 방법을 사용하는게 좋다며, 3가지 방법을 소개했다.
1. 자바 6이하라면  length() 

2. 자바 6이상이라면 isEmpty()
3. 자바 11이상이라면 isBlank()

length()및 isEmpty 사용시 whitespace(" ")값이 들어올 경우 문제가 생기기 때문에

str == null || str.trim().isEmpty();

위 코드처럼 trim()을 이용해서 공백제거 후 사용해야 되는데,
isBlank()를 사용하면 whitespace도 처리해 주므로 trim()을 사용하지 않아도 된다고 한다.

 


그리고 두번째로 Arrays.copyOf()메서드.
int 타입 배열을 입력받아 짝수배열만 리턴해야하는 문제였는데,

import java.util.Arrays;

public class Solution { 
	public int[] getEvenNumbers(int[] arr) {
		int result[];
		result = new int[arr.length];
		int copy[] = new int [arr.length];		
		int j = 0;

		if(arr.length == 0){
			result = new int[]{};
			return result;
			}
		
		for(int i = 0; i<arr.length; i++){
			if (arr[i]%2 == 0){
				copy[j] = arr[i];
				j+=1;
			} else{
				result = new int[result.length-1];
			}
		}
		for(int i = 0; i<copy.length; i++){
			if (copy[i] == 0)
				return result;
			result[i] = copy[i];
		}
		return result;
	} 
}

시작한지 얼마 안되서 아직 체계가 잡히지 못하고 생각대로 중구난방 적어버린 코드..
요렇게 작성해 놓고 레퍼런스 코드를 봤는데.

import java.util.Arrays;

public class Solution { 
	public int[] getEvenNumbers(int[] arr) {
    int[] concatArray = new int[]{};

    if(arr.length == 0) {
      return new int[]{};
    }

    for(int i = 0; i < arr.length; i++) {
      if(arr[i] % 2 == 0) {
        concatArray = Arrays.copyOf(concatArray, concatArray.length + 1);
        concatArray[concatArray.length - 1] = arr[i];
      }
    }

    return concatArray;
  }

Arrays.copyOf()메서드를 사용해서 한눈에 들어오게 작성되어 있었다.
앞으로 자바의 여러 메서드들을 잘 배우고 활용해서 코딩하도록 노력해야겠다는 생각이 들었다.