본문 바로가기
IT/자바

가변형 인자와 배열 두번째

by 독서실총무J 2017. 5. 16.
반응형

새벽이 시작되었으나 독서실은 끝나지 않는다

우리 마감 시간은 1시까지이다

고딩들은 정말 부지런 한것 같다

시간을 꽉꽉 채우고 나가는 아이들이 있다


난 왜 저나이대에 저렇게 하지 않았을까 후회된다

나이가 어려도 배울점이 있는 아이들이

정말 많다는걸 독서실 하면서 느꼈다


한편으로는 짠하기도 하다

저 어린 나이에 경쟁으로 깝깝한 

독서실에 오랜시간 동안 앉아있어야 하고.


다들 힘든 세상 모두 화이팅했으면 좋겠다

우리도 화이팅 해서 오늘의 복습을 시작해보자


저번 시간에 이어서 배열에 대해서 알아보자

조금은 깊숙히 들어갈 예정이니 잘 보도록 하자

근데 깊숙이 인가 ? 깊숙히 인가?

아는 사람 댓글좀 달아주라

내블로그에 아직 아무도 달지 않았다 

그래서 할맛이 안난다 


class ArrEx7 { public static void main(String[] args) { int[][] arr = new int[2][3]; arr[0][2] = 8; for(int[] temp : arr) { for(int n : temp) { System.out.println(n); } } arr[0] = new int[] {1,2,3,7,8,9}; arr[1] = new int[] {4,5,6}; for(int i=0; i<arr.length; i++) { for(int j=0; j<arr[i].length; j++) { System.out.println(arr[i][j]); } }


보시다시피 2차원 배열이다

for문으로 순서대로 뽑는 과정을 보여주고 있다

결과야 직접 확인해보면 알수 있을 것이다


가끔 책에 보면 다차원 배열들을 입체적으로 표현하던데

그건 처음 배우는 사람들이 쉽게 이해하도록

그렇게 해놓은 것이지 실제로 그렇지는 않다


실제로는 쭈욱 이어진 일차원 배열에 

그모든 정보가 담겨있다고 생각해야 한다


컴퓨터는 0과 1밖에 모르지 않은가?

다차원 적인 생각을 엄청나게 빨리 할뿐이다


엄청 멋있게 설명했지만 나도 배운거다

역시 뭔가 주워들어 놓으면 써먹는날이 오는것 같다


class ArrEx8 { public static void main(String[] args) { int[][][][][][][] arr = new int[3][][][][][][]; } }


오류가 날것이라고 생각하는가?

에러가 전혀 없는, 문제 없는 코드이다

배열이 어디까지 표현되는지는 잘 모르겠으나

저렇게 적어주어도 아무 문제가 없는

정상적인 형태가 된다


그러나 우리가 저런것을 사용할 경우가

생길지는 의문이다 

다음코드를 보도록 하자


interface IMyConstants {
	int AREA_COUNT = 3;
	int DEPT_COUNT = 2;
	int MONTH = 12;

	int SEOUL = 0;
	int BUSAN = 1;
	int JEJU = 2;

	int A = 0;
	int B = 1;
	
	int JAN = 0;
}
class ArrEx9 implements IMyConstants {
	

	public static void main(String[] args) {
		double[][][] sales = 
			new double[AREA_COUNT][DEPT_COUNT][MONTH];

		sales[BUSAN][A][JAN] = 1.0;
	}
}


인터페이스에는 상수와 추상메소드가 들어간다

저번저번 쯤에 이야기했던 내용이다


상수를 정의해서 인덱스안에 넣는것도 가능하다

그것을 보여주고 있는 코드이다 


생각해보면 배열 뿐만 아니라 프로그래밍에서

상수는 대단히 중요한 역할을 한다

가독성 부분에서 특히나 그렇다고 생각한다


이걸 좀더 유의해서 생각해보면 

네이밍이 얼마나 엄청나게 특별나게

중요한지 알수 있다


코딩 할때는 이름짓기에 소홀해서는 안된다

기발해서도 안되고 평범한게 좋다

남들이 다 알아먹을수 있게 지어야 한다는 것이다


class ArrEx11 { // JDK1.5~ // variable-length-arguments; /* 가변형 인자 */ public static void plus(int... nums) { System.out.println(nums.length); } public static void todo(int n, char c, String... strs) { } public static void main(String... args) { todo(3, 'a'); todo(1, 'b', "a", "bc", "ef"); plus(1,2); plus(1,2,3,4,5); plus(1,2,3,4,5,6,7,8); plus(); plus(new int[] {1,2,3}); } }


가변형 인자가 튀어나왔다

이놈은 자료형 뒤에 ... 을 붙여서 표현한다


기능에 대해 쉽게 설명하자면

변수의 인덱스 값을 하나하나 본다고 생각하면 된다


main문 가장 마지막에 있는 plus 메소드로 설명하자면

1,2,3이 순서대로 들어있기 때문에 그냥 꺼내주면 

차례대로 1,2,3이 나올것이다 


물론 , 여기서는 배열의 길이를 물어보고 있으니

3으로 결과값을 가질것이다 


그런데, 이 가변형 인자는 사용하는데 조건이 있다

첫번째는, 메소드당 하나만 존재 할수 있다는것

또하나는, 파라미터에서 가장 마지막에 들어가야한다는것이다


아주 유용하게 써먹는 놈이니 

필히 알아두어야 하겠다


class Car {
	public int speed;
	public int gear;
	public String color;
	
	public Car() {
		speed = 0;
		gear = 0;
		color = "red";
	}
	public void speedUp() {
		speed += 10;
	}
	public String toString() {
		return "속도" + speed + "기어" + gear + "색 " + color;
	}
}

public class CarArrayTest {
	public static void main(String[] args){
		final int NUM_CARS = 5;
		Car[] cars = new Car[NUM_CARS];
		for(int i = 0; i < cars.length; i++) {
			cars[i] = new Car();
		}
		for(int i = 0; i < cars.length; i++) {
			cars[i] - speedUp();
		}
		for(int i = 0; i < cars.length; i++) {
			System.out.println(cars[i]);
		}
		
	}
}


마지막이라서 조금 길다

final이 붙는 NUM_CARS는 상수이다

그외에는 모두 알고 있는 내용이니

더이상 설명할 거리가 없다


요새 들어 N사에서 자주 내 블로그 글을

빼먹고 누락시키고 있다

부들부들 떨리지만 어쩌겠는가

나는 을이니까 갑이 실수하면

그냥 받아들여야지


이건 어디서 주워들은건데

어쩌면 티스토리가 사라질수도 있다고 한다

이제 막 시작했거늘 그런말이 들리니

황당하고 괜히 왔나 싶긴 하지만


그냥 말도 안되는 소리길 바란다

근데 만약에 서비스가 종료되면

여지껏 열심히 자식처럼 관리하고

꾸미고 글을 쓴 사람들은 정말

허탈할것 같다 


애지중지 하던것이 한방에 사라지니 말이다

그냥 헛소문이길 바라면서 

오늘은 여기까지 쓰고 자야겠다


배열 내용 두번째인 여기까지이고

내일부터는 새로운 것에 대해 복습하자


반응형

'IT > 자바' 카테고리의 다른 글

배열 정렬과 compareTo  (0) 2017.05.18
제네릭 사용법과 학급관리시스템  (0) 2017.05.17
배열 정리 첫번째  (0) 2017.05.15
자바 equals 메소드 복습  (0) 2017.05.14
인터페이스 활용 예제 2개  (0) 2017.05.12

댓글