배열

소정·2023년 1월 20일
0

Java

목록 보기
7/23
  • 같은 자료형 여러개를 묶어 놓은 것
  • 자바에서 배열은 객체로 관리함
  • 객체 멤버들은 쓰레기를 가지지 않음 자동 0에 해당하는 값으로 초기화
    (int = 0, double = 0.0, boolean = false)
  • 만들때는 통채로 제어할땐 요소 하나하나

배열단점

  • 개수를 미리 지정해야한다는 점
  • 한 번 요소개수를 정하면 바꿀 수 없음
  • 배열은 불변 개수 변경이 불가능
    => 실무환경에선 데이터 개수가 유동적 경우가 더 많음 [ex. 게시글 등]
    그래서 등장한 클래스 [마치 기차같은 모양] : ArrayList

선언방법

자료형[] 배열명 = new 자료형[개수];


//int형 3개짜리 배열 객체 생성
int[] aaa = new int[3];
		
System.out.println(aaa); //배열객체 .toString()이라는 기능이 자동 발동 -> 설명 글 나옴


	//배열참조변수끼리의 대입
	double[] ggg = new double[] {3.14,2.48,7.23};
	double[] hhh = ggg; //객체 대입이 아니라 주소값을 복사한 것 => 하나의 객체를 공유하게됨
				
	for(int i=0;i<ggg.length; i++) {
		System.out.print(ggg[i] + ", "); //3.14, 2.48, 7.23, 
	}
		
	System.out.println();
	
	for(int i=0;i<hhh.length; i++) {
		System.out.print(hhh[i] + ", "); //3.14, 2.48, 7.23, 
	}

	System.out.println();
	System.out.println();
		
	/*공유된 객체를 참조하는 참조변수 중 하나를 이용하여 요소값 변경하여
	  다른 참조 변수의 값도 영향을 받는 것을 확인해보자 	*/
	hhh[1] = 6.49;
		
	for(int i=0;i<ggg.length; i++) {
		System.out.print(ggg[i] + ", "); //3.14, 6.49, 7.23, 
	}
		
	System.out.println();
		
	for(int i=0;i<hhh.length; i++) {
		System.out.print(hhh[i] + ", "); //3.14, 6.49, 7.23, 
	}

결과창과 해시코드 => 같은 객체 바라봄

배열객체의 요소값 copy해보기

int[] mmm = {50,60,70};
int[] nnn = new int[mmm.length]; //mmm배열과 같은 개수의 값이 0인 배열객체 생성
		
//반복문으로 nnn에 값 카피
for(int i=0; i<nnn.length;i++) {
	nnn[i] = mmm[i];
}
		
//nnn과 mmm의 참조하는 배열 객체는 서로 다른 객체
		
//해시코드 확인
System.out.println(mmm);
System.out.println(nnn);

해시코드 결과창


참조형 배열

  • 오해하지말기 배열안에 객체를 여러개 갖지않음!!
  • 참조변수만 여러개 가진것
  • 객체는 하나! 참조 변수가 여러개!
  • 참조형의 초기값 = null (무조건!!)


public class Main {
	public static void main(String[] args) {
  
    	String[] sss=new String[3]; //String참조변수 3개짜리
		System.out.println(sss[0]); //참조변수에 값을 넣지 않으면 0에 해당하는 값 : null
		
		//배열 객체의 요소들(참조변수)에 값(객체) 대입
		//배열안의 참조변수들은 각각 개발자가 대입한 주소를 가르키고 있다
		sss[0] =  new String("sam");
		sss[1] = "배고파"; //new String() 생략 가능
		sss[2] = "종려";
		
		
		for(int i=0; i< sss.length;i++) {
			System.out.println(sss[i]);
		}
		
		//각각 배열요소(Stirng 참조변수)의 기능 메소드 사용해보기
		System.out.println("배열릐 길이 값 : " + sss.length); //얜 배열
		
		//얘네는 Stirng참조변수
		System.out.println(sss[0].length());
		System.out.println(sss[1].length());
		System.out.println(sss[2].length());
		System.out.println();
		
		
		char ch = sss[1].charAt(0);
		System.out.println(ch);
		
		
		//참조형 배열객체 초기화
		String[] uuu = new String[] {new String("android"),new String("ios")};
		uuu = new String[] {"android", "ios", "web"}; 
		String[] zzz = {"android", "ios", "web"}; //배열 참조변수 초기화하면서 배열객체 초기화 할때는 축약표현 가능 
		
		for(int i=0; i<zzz.length; i++) {
			System.out.println(zzz[i]);
		}
		
		//개발자가 만든 class도 배열로 만들 수 있다
		Person p =new Person();
		
		p.name = "sam";
		p.age = 20;
		
		p.show();
		
		
		Person[] people = new Person[3];
		people[0] = new Person();
		people[1] = new Person();
		people[2] = new Person();
		
		people[0].name = "yong";
		people[0].age = 10;
		
		people[0].show();
		people[1].show();
		people[2].show();
    }
 }

//사용자 정의 클래스
class Person {
	String name;
	int age;
	
	void show() {
		System.out.println(name+" : "+age);
	}
	
}



확장 for문(for each문)

  • 배열처럼 여러개의 요소를 가진 객체의 요소제어를 위한 반복문을 쉽게 사용하기 위해 등장한 새로운 for문
  • 단점 : 조절이 안됨
    -> 3~10번만 가져올래 하는 건 안됨
  • 0~끝방까지 전부 탐색할 때만 쓴다
public class Main {
	public static void main(String[] args) {
		int[] nums = new int[] {10,20,30};
				
		//반복문 이용하여 요소값들 출력
		for(int i=0; i<nums.length; i++) {
			System.out.println(nums[i]);
		}
		
		System.out.println();
		
		//A
		for(int i=0; i<nums.length; i++) {
			int t = nums[i]; //요소 하나하나를 잠깐 들고 있는 t
			System.out.println(t);
		}
		
		System.out.println();
		
		//확장된 for문으로 배열의 요소값을 간결하게 출력해보기
		for( int t : nums ) { //A의 임시변수 t와 같은 친구
			System.out.println(t); 
		}
        
        double[] xxx = {3.14, 2.56, 8.79};
		for(double t : xxx) {
			System.out.println(t);
		}
		
		
		String[] rrr = {"aaa","react","cccc"};
		for(String t : rrr) {
			System.out.println(t+" : "+t.length() );
		}
        
    }
}



다중 포문

2차원 배열

  • 2차원 배열은 1차원배열 참조변수를 여러개 가진 배열 객체

선언방법

자료형[][] 배열명 = new 자료형[봉지][몇개씩];


public class MainMuliArray {

	public static void main(String[] args) {

		//Java의 2차원 배열 - 1차원 배열 참조변수를 여러개 가진 것
		
		//2차원 배열 객체
		int[][] aaa = new int[3][]; //1차원 배열 참조변수 3개짜리 배열객체
		
		System.out.println(aaa[0] ); //참조변수 기본값 null나옴
		
		
		//이차원배열요소(참조변수)에 값(배열 객체) 대입
		aaa[0] = new int[4];
		aaa[1] = new int[2];
		aaa[2] = new int[5];
		
		//1차원 배열객체들의 요소(int변수)의 정수값 대입
		aaa[0][0] = 10;
		aaa[0][1] = 20;
		aaa[0][2] = 30;
		aaa[0][3] = 40;

		aaa[1][0] = 100;
		aaa[1][1] = 200;

		aaa[2][0] = 1000;
		aaa[2][1] = 2000;
		aaa[2][2] = 3000;
		aaa[2][3] = 4000;
		aaa[2][4] = 5000;
		
		//출력 - 반복문 사용
		//반복횟수에 사용될 배열의 길이값 확인해 보기
		System.out.println(aaa.length); //참조변수 개수
		System.out.println(aaa[0].length); //각각 참조변수가 가르키는 length 
		System.out.println(aaa[1].length); 
		System.out.println(aaa[2].length);
		
		System.out.println();
		
		//반복문
		for(int i=0; i<aaa.length; i++) { //봉지 수
			for(int j=0;j < aaa[i].length ;j++) { //각각 다르게 들어있는 귤 수
				System.out.print(aaa[i][j] + ", ");
			}
			System.out.println();
		}
		
		System.out.println();
		
		//확장 for문 으로 해보기
		for(int[] t : aaa) { //헷갈리지 말자 임시변수는 꺼내려는 변수의 자료형!!
			for(int a : t) {
				System.out.print(a + ", ");
			}
			System.out.println();
		}
		
		System.out.println();
		
		//각 봉지마다 개수가 다 똑같으면...쉽게 2차원 배열 생성 가능
		int[][] bbb = new int[2][3]; 
		for(int i=0; i<bbb.length; i++) { //봉지 수
			for(int j=0;j < bbb[i].length ;j++) { //각각 다르게 들어있는 귤 수
				System.out.print(bbb[i][j] + ", ");
			}
			System.out.println();
		}
		
        
        //2차원 배열의 초기화
		int[][] ccc = new int[][] {new int[] {10,20}, new int[] {10,20,30,40}};
		
		int[][] ddd = new int[][] {
			{10,20},
			{10,20,30,40}
		};
		
		//초기화의 축약표현
		int[][] eee = {
			{10,20},
			{10,20,30,40}
		};
        
        for(int[]t : ddd) {
			for(int e : t) {
				System.out.print(e + ", ");
			}
			System.out.println();
		}
		
	}

}


3차원

2차원배열 참조변수를 여러개 가진 배열객체

int[][][] abc = new int[2][][];//2차원 배열 참조변수가 2개짜리 배열객체
		
abc[0] = new int[3][];
abc[1] = new int[4][];
		
abc[0][0] = new int[2];
abc[0][1] = new int[5];
abc[0][2] = new int[1];
		
abc[1][0] = new int[7];
abc[1][1] = new int[3];
abc[1][2] = new int[2];
abc[1][3] = new int[6];
		
abc[0][1][2] = 50;

c언어 배울때 아파트 층 호수로 이해 했을 땐 다차원 배열이랑 가까워 졌는데 역시나 호락호락한 애가 아니였다 다시 오만보 멀어짐 참나...

profile
보조기억장치

0개의 댓글