본문 바로가기

백엔드개발자 준비하기

[백엔드개발자 준비하기] 배열

[배열]
-배열은 참조자료형
-변수를 인덱스당 하나씩 할당하고 new로 생성시에 메모리에 동적으로 할당해줌
-각 인덱스 번호의 주소에 들어있는 값을 들고옴
-반복을 쓰기 위해 배열을 사용

 

예시1

		int num1 = 10;
		int num2 = 20;
		int num3 = 30;
		int num4 = 40;
		int num5 = 50;
		
		System.out.println(num1);
		System.out.println(num2);
		System.out.println(num3);
		System.out.println(num4);
		System.out.println(num5);
		
		// 배열은 참조자료형
		// new는 생성할 때 무조건 동적할당
		// 인덱스 사용
		// 각 번호의 인덱스 주소를 참조함
		int[] nums = new int[5];
		nums[0] = 10;
		nums[1] = 20;
		nums[2] = 30;
		nums[3] = 40;
		nums[4] = 50;
		
		for(int i = 0; i < 5; i++) {
			System.out.println(nums[i]);
		}

 

예시2

	public static void printNames(String [] names) {
		
		// @.length : @의 크기를 참조하여 유동적으로 들고옴
		// names 이름은 동일하지만 다른 변수임 
		for (int i = 0; i < names.length; i++) {
			System.out.println("이름[" + (i + 1) + "] : " + names[i]);
		}
		
		System.out.println();
	}
	
	public static void main(String[] args) {

		// 배열을 미리 만들어놓고 그 뒤에 값을 넣는것
		// 들어갈 값이 정해져있지 않을때, 들어갈 내용과 용량이 확실할 때 사용
		String[] names = new String[3];

		names[0] = "김상현";
		names[1] = "임나영";
		names[2] = "김종환";
		
		// 배열 생성과 동시에 값을 넣는것
		// 다음과 같은 배열을 쓸 때는 크기를 지정해두면 안됨
		// 이 이후에 들어오는 값을 보고 공간을 할당해줌
		String[] names2 = new String[] {"이상현", "손지호", "이강용"};
		
		// 2번을 줄인것
		String[] names3 = {"김두영", "강대협", "이현수", "김재영"};
		
		
		printNames(names);
		
		// 이런식으로도 사용가능
		printNames(new String[] {"이상현", "손지호", "이강용"});
		printNames(names3);
	}

 

예시3

// 랜덤 임포트 해야함

		Random random = new Random();

		// nums 라는 10개의 공간을 만들어놓음
		int[] nums = new int[10];

//		// 0 ~ 9까지 랜덤하게 출력
//		System.out.println(random.nextInt(10));

//		for (int i = 0; i < 10; i++) {
//			nums[i] = i;
//			
//			System.out.println(i);
//		}
		
		// for문의 목적 : 배열의 처음부터 끝까지 값을 넣기위해
		// i : 배열의 인덱스 값
		for (int i = 0; i < nums.length; i++) {
			// 
			while (true) {
				boolean findFlag = true;
				
				// 랜덤한 값을 하나 만들어 변수에 넣어둠
				int randomNum = random.nextInt(nums.length) + 1;
				
				// 현재 nums[]안에 들어있는 값을 j값이 도는동안 꺼내와서 랜덤값과 비교
				// j가 증가할 동안 배열에 있는 값을 꺼내와 비교했을때 같은 값이 없으면 그냥 for문 다 돌고 종료
				for (int j = 0; j < nums.length; j++) {
					
					if (nums[j] == randomNum) {
						// 만약 값이 같으면 플래그를 false로 변경
						findFlag = false;
						// 배열을 비교하다 같은값이 있으면 멈추는 브레이크
						break;
					}
				}
				
				// 따로 값을 쓰지 않으면 ()안의 조건이 true일때라는 조건임
				if (findFlag) {
					nums[i] = randomNum;
					// while 의 무한루프를 멈춰주는 브레이크 
					break;
				}
			}
		}	
		
		for (int i = 0; i < nums.length; i++) {
			System.out.println(nums[i]);
		}

 

예시4

		J12_User[] users = new J12_User[3];
		
		J12_User[] users2 = new J12_User[] {
				new J12_User("aaa", "1234", "김종환", "aaa@gmail.com"),
				new J12_User("bbb", "1234", "이종현", "bbb@gmail.com"),
				new J12_User("ccc", "1234", "진채희", "ccc@gmail.com")
	
		};
		
		J12_User[] users3 = {
				new J12_User("aaa", "1234", "김종환", "aaa@gmail.com"),
				new J12_User("bbb", "1234", "이종현", "bbb@gmail.com"),
				new J12_User("ccc", "1234", "진채희", "ccc@gmail.com")
	
		};
		
		users[0] = new J12_User ("aaa", "1234", "김종환", "aaa@gmail.com");
		users[1] = new J12_User ("bbb", "1234", "이종현", "bbb@gmail.com");
		users[2] = new J12_User ("ccc", "1234", "진채희", "ccc@gmail.com");

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

 

예시5

	private static void transferArray(int[] oldArray, int[] newArray) {
		for (int i = 0; i < oldArray.length; i++) {
			newArray[i] = oldArray[i];
		}
	}
	
	// 배열을 받아와서 newArray에 받아온 배열의 크기에 1을 더하여 newArray에 대입
	// transferArray에 받은 배열과 newArray를 붙임
	private static int[] addArrayLength(int[] array) {
		
		int[] newArray = new int[array.length + 1];
		
		transferArray(array, newArray);
		
		return newArray;
	} 
	
	// 배열과 데이터를 받아와서 addArratLength를 통해 newArray에다 새 배열 등록
	public static int[] addData(int[] array, int data) {
		int[] newArray = addArrayLength(array);
		newArray[array.length] = data;
		
		return newArray;
	}

	// 메소드명만 보고도 하는 동작을 알수 있어야 함(클린코드)
	// 클래스간의 응집도는 높고 결합도가 낮아야 좋다 
	public static void main(String[] args) {
		
		int[] nums = new int[0];	
		
		// 새로만든 배열에 addData를 사용하여 값을 넣어줌
		nums = addData(nums, 1);
		nums = addData(nums, 2);
		nums = addData(nums, 3);
		nums = addData(nums, 4);
		nums = addData(nums, 5);
		
		//
		for (int i = 0; i < nums.length; i++) {
			System.out.println(nums[i]);
		}
	}

 

예시6

		String[] names = { "박성진", "조병철", "황창욱" };

		for (int i = 0; i < names.length; i++) {
			System.out.println(names[i]);
		}
		
		System.out.println("==============<forEach>==============");
		
		for(String name : names) {
			System.out.println(name);
			names[1] = "김준일";
		}
		
		int[] nums = {1, 2, 3, 4, 5};
		
		for (int i : nums) {
			System.out.println("i : " + i);
		}