본문 바로가기
JAVA

지금까지도 내가 쓰고 있는 자바배열병법

by helloissue 2021. 8. 21.

지식인에게서의 활동 내용을 둘러보다가, 배열에서의 질문 답글들에서 30킬로 제한이 걸린 도로의 방지턱처럼 배열에서의 신경 써야 할 것도 많고 쓰기도 참 어렵다고 느꼈다. 자바기초에서의 배열은 왜 이렇게 어려웠을까? 이제 갓 배운 자바 어린이들에게 이런 방지턱 배열 공식 아직도 배우고 있냐는 생각도 들고, 아직도 배열이 어려워 지식인의 글이 올라가는 것을 보면 얼마나 많은 이들이 좌절을 맞보겠는가 싶기도 하다. 그럼 지금의 나와 예전의 나는 얼마나 다를까 곰곰이 생각하다가 배열을 두고 어떻게 발전했는가, 또 지금까지 내가 쓰는 자바배열병법을 이야기 해보려한다.

자바배열병법
자바배열병법

String[] asNames00 = { "월","화","수","목","금","토","일" };

for( int i=0 ; i < asNames00.length; i++ ) {
	System.out.println( asNames00[ i ] );
}

이것은 가장 처음에 배우게 되는 배열이다. 가장 쉬워 보이기도 하지만, 어떻게 보면 가장 어렵다고 생각한다. 이제 처음 배우는데 for 문안의 조건식에서의 초깃값, 증감 값, 마지막 값까지 고려해야 한다. 그것도 어려워 죽겠는데. for 문안의 배열을 출력하면서 [ i ]인덱스값까지 고려해야 한다. `java.lang.ArrayIndexOutOfBoundsExcept`과 함께 도대체 인덱스[ i ] 뭐가 들어오는지 확인해보려고 System. out. print ln( i ); 대한민국에서 자바를 배웠다 하는 수천 명이 다 찍어 봤을 것이다. 배워서 이제 욕심이 나서 뭘 해보고 싶은데, 배열에서의 추가 또는 삭제로 확장하려 하니, 쉽지 않다. 배열은 처음부터 공간을 지정해놓고 사용하는 곳이기 때문에, 추가나 삭제는 힘들다는 것을 알게 된다.

int[][] asGudan = new int[10][10];  

for (int i = 2; i < asGudan.length; i++) {
	for (int j = 1; j < asGudan[i].length; j++) {         
		asGudan[i][j] = i * j;                    
		System.out.print( i + " x " + j + " = " + asGudan[i][j] + " @ ");
		if (j == 9 ) { System.out.println("\n");}
	}
}
// 2 x 1 = 2 @ 2 x 2 = 4 @ 2 x 3 = 6 @ 2 x 4 = 8 @ 2 x 5 = 10 @ 2 x 6 =

그다음 배우게 되는 이중 배열이다, 세계 7대 불가사의 다음으로 희대의 의문으로 생각한다. 이제 갓 배우는 자바 어린이들에게 이중 다 차원배열? 심지어 삼차원배열도 배운다는 카더라의 소식도 있다. 이것을 배워서 도대체 뭐에 써먹는가? 이것을 실무에 쓰긴 쓰는가? 예전의 어떤 회사에서 있던 일이 갑자기 생각났다. 새로 시작된 프로젝트와 기존의 유지보수를 동시에 수행하던 중 새 프로젝트에 바빠서 부사수에게 신경을 쓰지 못했던 일이 생각이 났다. 갓 들어온 신입이기도 했고, 잘하겠거니 유지보수니까, 했는데 달력의 오작동을 일주일 내내 고쳐보려 했다는 것이다. 들어가 보니 이중 다차원배열로 짜여진…. 그냥 구글에서  당장 구글링해서 공개 소스 달력으로 바꾸어 버렸다. 2중 포문 2중 다차원배열 이것을 배워서 일주일 동안? 헤맬 일인가? 오히려 시간과 비용이 많이 들면 빨리 다른 대체 방안을 찾는 것이 더 좋은 선택이지 않은가? 나는 이렇게 시간과 비용을 낭비할 거라면, 개발자에게 눈알 빠지게 만들거라면 다 차원배열은 경제성과 효율성의 입장에서 버려야 한다고 생각한다.

 

ArrayList<String> alWeeks01 = null;
String[]          arWeeks04 = null;

try {

    alWeeks01               = new ArrayList<String>();
    alWeeks01.add("월");alWeeks01.add("화");alWeeks01.add("수");alWeeks01.add("목");
    alWeeks01.add("금");alWeeks01.add("토");alWeeks01.add("일");alWeeks01.remove(6);
    arWeeks04	            = alWeeks01.toArray( new String[ alWeeks01.size() ] );	
    for( String sTemp : alWeeks01 ) { System.out.println( "!" + sTemp ); }
    for( String sTemp : arWeeks04 ) { System.out.println( "!" + sTemp ); }
    
}catch (Exception e) {
    e.printStackTrace();
}
//!월 !화 !수 !목 !금 !토

그다음 배우게 된 어레이 리스트다. 배열의 삽입과 삭제의 어려움이 사라지고 이제 자유롭게 내가 데이터를 다룰 수 있겠다는 자신감과 확장 포문을 적용하여 초깃값, 증감 값, 마지막 값의 선택 리스크에서 자유로워졌다. 심지어 지긋지긋한java.lang.ArrayIndexOutOfBoundsExcep 안보니 살 것 같았고, 인덱스[ i ]를 찍는 것에도 자유로워졌다. 오히려 어레이 리스트를 배열보다 더 빨리 배우는 것이 좋지 않을까 싶다.

 

for( String sTemp : "월,수,금".split(",") ) { System.out.println( "!" + sTemp ); }
//!월 !수 !금

변수를 선언하는 것도 어레이 리스트에 추가하는 것도 귀찮아졌다. split으로 배열을 생성하는 것을 배운 뒤 코드가 더 간결해졌다. 지금의 배열활용법과 자바 어린이 때의 배열활용법이 많이 달라졌다. 가독성이 중요하다는 것을 알았고, 최대한 코드가 간결해야 하고 이것저것 신경쓰지 않게 만드는것이 잦은 변경에서도 질긴 생명력을 유지할 수 있었다. 


마치면서 라떼는말이야의 꼰대의 어렵게 느껴졌던 그 시절 배열병법 이야기였습니다.

 

 

댓글