코딩/2-JAVA

C1102클래스배열 , C1102클래스배열_개념연습(1~4)

tree0505 2025. 7. 1. 11:37
반응형
    • C1102클래스배열

  • C1102개념01_클래스배열
package C1102클래스배열;

class Member{
	int number; 
	String id; 
	String pw; 
	String name; 
	int score;
}

public class C1102개념01_클래스배열 {
	public static void main(String[] args) {
		
		//데이터가 3가지 모양이다. 
			//문자열. 배열. 클래스 
		String data1 = "1001/1234/qwer/김철수/10"; //문자열 	
		String[] dataList1 = {"1001", "1234", "qwer", "김철수", "10"};//배열 	
		
		//클래스 
		Member member = new Member();
		member.number = 1001;
		member.id = "qwer";
		member.pw = "1234";
		member.name = "김철수";
		member.score = 10;
		
		//-------------------------------------------------	
		//위의 것들을 결국 배열에 담아야 한다. 
		String data2 = "";
		data2 +="1001/qwer/1234/김철수/10\n";	
		data2 += "1002/asdf/2345/이영희/30";
		
		String[][] dataList2 ={
			{"1001" , "qwer" ,"1234", "김철수" , "10"},
			{"1002" , "asdf" ,"2345", "이영희" , "30"},
		};	
		
		//-------------------------------------------------	
		// 클래스 =  사용자 정의 데이터 타입
		//지금 가장 쓰는 형태 
		Member[] memberList = new Member[2];
		//클래스 배열 
		//머리만 만든거다. 
		
		System.out.println(memberList[0]);
		System.out.println(memberList[1]);
		
		Member m1 = new Member(); 
		//몸통 
		m1.number = 1001;
		m1.id = "qwer";
		m1.pw = "1234";
		m1.name = "김철수";
		m1.score = 10;
		memberList[0] = m1;//머리에다가 붙인다. 
		
		Member m2 = new Member();
		//몸통 
		m2.number = 1002;
		m2.id = "asdf";
		m2.pw = "2345";
		m2.name = "이영희";
		m2.score = 30;
		memberList[1] = m2;//머리에다가 붙인다. 
		
		
		for(int i=0; i<memberList.length; i++) {
			System.out.println(memberList[i].name);
		}
		
	}
}

  • 메모리 
    • Member[] memberList = new Member[2];
      • memberlist가 있고 
      • 머리만 2개 만듬 
        • [0] - 여기에 m1이 들어온것 
        • [1] 
    • Member m1 = new Member();
      • ml
        • 이것을 [0]에 집어넣은것 
      • 5개. 클래스
    • ml. m1. m2 만 main에 있고.
      • 나머지는 전부 heap에 있다.  


  • C1102개념02_클래스배열
package C1102클래스배열;

/*
class Member{
	int number; 
	String id; 
	String pw; 
	String name; 
	int score;
}
 */

public class C1102개념02_클래스배열 {
	public static void main(String[] args) {
		
		// 클래스 배열은 2차원배열과 비슷한 구조이다.
		int[][] arr = new int[3][];
		//머리만 만든것 / 몸통이 없다.  
		//현재 arr, 머리 3개 
		
		arr[0] = new int[3]; //몸통3개 
		arr[1] = new int[3]; //몸통3개 
		arr[2] = new int[3]; //몸통3개 
		//총 변수가 13개인거다. 
		
		
		Member[] memberList = new Member[3];
		//변수 1개. 몸통3개. 
		memberList[0] = new Member(); //몸통 5개 
		memberList[1] = new Member(); //몸통 5개 	 
		memberList[2] = new Member(); //몸통 5개 
		//총 19개 
		
	}
}

  • C1102개념03_클래스배열
package C1102클래스배열;

/*
class Member{
	int number; 
	String id; 
	String pw; 
	String name; 
	int score;
}
 */

public class C1102개념03_클래스배열 {
	public static void main(String[] args) {
		
		String[][] dataList ={
			{"1001" , "qwer" , "1234", "김철수" , "10"},
			{"1002" , "asdf" , "2345", "이영희" , "30"},
		};	
		
		int size = dataList.length;
		Member[] memberList = new Member[size];
		//String[][] dataList 데이터가 있는데. 
		//Member[] memberList = new Member[size]; 
			//여기다가 어떻게 넣느냐. 
		
		// 방법1
		for(int i = 0; i < size; i++) {
			Member m = new Member(); //맴버 만듬 
			//따로 변수를 만들어서 집어넣기 
			m.number = Integer.parseInt(dataList[i][0]);
			m.id = dataList[i][1];
			m.pw = dataList[i][2];
			m.name =  dataList[i][3];
			m.score = Integer.parseInt(dataList[i][4]);
			
			memberList[i] = m;
		}
		
		// 방법2
		for(int i = 0; i < size; i++) {
			memberList[i] = new Member();
			//직접 배열에 넣어도 된다. 
			
			memberList[i].number = Integer.parseInt(dataList[i][0]);
			memberList[i].id = dataList[i][1];
			memberList[i].pw = dataList[i][2];
			memberList[i].name =  dataList[i][3];
			memberList[i].score = Integer.parseInt(dataList[i][4]);
		}
		
	}
}

  • C1102개념04_클래스배열
package C1102클래스배열;

import java.util.Arrays;

/*
class Member{
	int number; 
	String id; 
	String pw; 
	String name; 
	int score;
}
 */

public class C1102개념04_클래스배열 {
	public static void main(String[] args) {
		//궁극적으로 
		
		//이렇게 데이터가 넘어올것이다. 문자열로 
		String data = "";
		data += "1001,qwer,1234,김철민,10\n";
		data += "1002,asdf,2345,우중현,3\n";
		data += "1003,zxcv,3456,이만수,30";
		//-------------------------------------		
		System.out.println(data);
		String[] tokens = data.split("\n");
		//토큰으로 잘라서 
		System.out.println(Arrays.toString(tokens));
		//------------------------------------------
		// 위 데이터를 클래스 배열에 넣고 1등 이름출력 
		Member[] memberList = null;
		int size = tokens.length;
		memberList = new Member[size]; //머리 만들기 
		
		for(int i = 0; i < size; i++) {
			// 1001,qwer,1234,김철민,10
			String[] tokens2 = tokens[i].split(",");
			//토큰에서 한번 더 자른다. 
			
			memberList[i] = new Member();
			
			memberList[i].number = Integer.parseInt(tokens2[0]);
			memberList[i].id = tokens2[1];
			memberList[i].pw = tokens2[2];
			memberList[i].name = tokens2[3];			
			memberList[i].score = Integer.parseInt(tokens2[4]);
		}
		
		int max = memberList[0].score;
		String name = memberList[0].name;
		for(int i = 0; i < memberList.length; i++) {
			if(memberList[i].score > max) {
				max = memberList[i].score;
				name = memberList[i].name;
			}
		}
		
		System.out.println(name);
		
	}
}

  • C1102개념05_클래스배열_암기
    • 컨트롤러
    • 한번 만드는것이 좋다. 
    • 암기는 외우는것? 
package C1102클래스배열;

import java.util.Scanner;

/*
class Member{
	int number; 
	String id; 
	String pw; 
	String name;
	int score;
}
 */

public class C1102개념05_클래스배열_암기 {
	public static void main(String[] args) {
		
		/*
			[문제] 클래스 배열을 이용해서 CRUD를 구현하시오.
		 */
			
		int max = 100;
		Member[] memberList = new Member[max];
		//이 배열에 넣는것 
		
		int size = 0;
		int num = 1000; // 번호를 1000부터 시작	
		Scanner scan = new Scanner(System.in);	
		
		while(true) {

			System.out.println("[1]가입 [2]탈퇴 [3]수정 [4]검색 [5]전체출력 [0]종료");
			
			int sel = scan.nextInt();
			if(sel == 1) {
				// 객체(instance)
				Member member = new Member(); 
				member.number = num;
				
				num += 1;
				
				System.out.println("[가입]아이디 입력 : ");
				member.id = scan.next();
				System.out.println("[가입]비밀번호 입력 : ");
				member.pw = scan.next();
				System.out.println("[가입]이름 입력 : ");
				member.name = scan.next();
				System.out.println("[가입]점수 입력 : ");
				member.score = scan.nextInt();
				
				memberList[size] = member;
				size += 1;
			}
			else if(sel == 2) {
				System.out.println("[탈퇴] 아이디 입력 : ");
				String id = scan.next();
				
				int index = -1;
				for(int i = 0; i < size; i++) {
					if(memberList[i].id.equals(id)) {
						index = i;
						break;
					}
				}
				
				if(index == -1) {
					System.out.println("아이디를 확인해주세요.");
				}else {
					for(int i = index; i < size-1; i++) {
						memberList[i] = memberList[i + 1];
					}
					memberList[size - 1] = null;
					size -= 1;
				}
			}
			else if(sel == 3) {
				System.out.print("[수정]아이디 입력 : ");
				String id = scan.next();
				
				int index = -1;
				for(int i=0; i<size; i++) {
					if(memberList[i].id.equals(id)) {
						index = i;
						break;
					}
				}
				
				if(index == -1) {
					System.out.println("아이디를 확인해주세요.");
				} else {
					while(true) {
						System.out.println("[1]이름 수정 [2]성적 수정 [0]종료");
						int menu = scan.nextInt();
						
						if(menu == 0) {
							break;
						} else if(menu == 1) {
							System.out.print("[수정]이름 입력 : ");
							String newName = scan.next();
							
							memberList[index].name = newName;
						} else if(menu == 2) {
							System.out.print("[수정]성적 입력 : ");
							int newScore = scan.nextInt();
							
							memberList[index].score = newScore;
						}
					}
				}
			}
			else if(sel == 4) {
				System.out.print("[검색]아이디 입력 : ");
				String id = scan.next();
				
				int index = -1;
				for(int i=0; i<size; i++) {
					if(memberList[i].id.equals(id)) {
						index = i;
						break;
					}
				}
				
				if(index == -1) {
					System.out.println("아이디를 확인해주세요.");
				} else {
					System.out.print(memberList[index].number + " " + memberList[index].id + " ");
					System.out.println(memberList[index].pw + " " + memberList[index].name + " " + memberList[index].score);
				}
			}
			else if(sel == 5) {
				for(int i = 0; i < size; i++) {
					System.out.print(memberList[i].number + " " + memberList[i].id + " ");
					System.out.println(memberList[i].pw + " " + memberList[i].name + " " + memberList[i].score);
				}
			}else if(sel == 0) {
				break;
			}
		}	
		
		scan.close();		
	}
}

  • C1102개념06_클래스배열_주소
package C1102클래스배열;

class AA{
	int a;
	int b;
}

public class C1102개념06_클래스배열_주소 {
	public static void main(String[] args) {
		
		AA aa = new AA();
		aa.a = 10;
		aa = new AA();
		aa.b = 20;
		
		// 실행 전 예상하기
		System.out.println(aa.a + " ," + aa.b);
		
	}
}

  • 메모리 
    • heap은 GC가비지컬렉터가 삭제한다. 
    • main은 중괄호가 끝나면 삭제된다. 


  • C1102개념07_클래스배열_주소
package C1102클래스배열;

class BB{
	int a;
	int b;
}

public class C1102개념07_클래스배열_주소 {
	public static void main(String[] args) {
		
		BB [] bb = new BB[3];
		//머리만 3개 만듬 
		//BB [] bb => 1번째 main에 생긴다. 
		//new BB[3]; => heap에 생긴다. 
		for(int i = 0; i < bb.length; i++) {
			bb[i] = new BB();
			bb[i].a = 10;
			bb[i].b = 20;
		}
		
		// 실행 전 예상하기
		for(int i = 0; i  < bb.length; i++) {
			System.out.println(bb[i].a + bb[i].b);
		}
		
	}
}

  • 메모리 


  • C1102개념08_클래스배열_주소
package C1102클래스배열;

class CC {
	int a;
	int b;
}

public class C1102개념08_클래스배열_주소 {
	public static void main(String[] args) {
		
		CC[] ccList = new CC[3];
		//ccList => main에 생김 
		//CC[3] => heap 머리 3개 만듬 
		// 
		
		for (int i = 0; i < ccList.length; i++) {
			ccList[i] = new CC();
			ccList[i].a = 10;
			ccList[i].b = 20;
		}
		// 실행 전 예상하기
		for (int i = 0; i < ccList.length; i++) {
			System.out.println(ccList[i].a + " " + ccList[i].b);
		}
		System.out.println("----------------------------");
		CC cc = ccList[0];
		//cc => main에 생김 
		
		cc.a = 100;

		// 실행전 예상하기
		for (int i = 0; i < ccList.length; i++) {
			System.out.println(ccList[i].a + " " + ccList[i].b);
		}
		
	}
}

  • 메모리 


  • C1102개념09_클래스배열_주소
package C1102클래스배열;

class DD {
	int a;
	int b;
}

public class C1102개념09_클래스배열_주소 {
	public static void main(String[] args) {
		
		DD[] ddList = new DD[3];
		//ddList => main에 생김 
		//heap에 DD[3] => 머리 3개 생김 
		
		DD d1 = new DD();
		//d1 => main에 생김 
		//heap에 DD . 클래스니까. a와 b가 생김 
		d1.a = 100;	
		//int a = 100을 넣은것 
		ddList[0] = d1; //넘겨주고 
		
		d1 = new DD();
		//heap에 new. a와 b가 생김
		//GC컬렉터는 실행이 안 된다. 
			//X1을 알고 있는 애가 있다.
			//d1이 new를 하기 전에 넘겨주고 new를 한거다. 
		d1.a = 200;
		ddList[1] = d1; //넘김 
		
		d1 = new DD();
		d1.a = 300;
		ddList[2] = d1;
		
		// 실행 전 예상하기
		for(int i = 0; i < ddList.length; i++) {
			System.out.println(ddList[i].a);
		}
		
	}
}

  • 메모리 


  • C1102개념10_클래스배열_주소
package C1102클래스배열;

import java.util.Arrays;

class EE {
	int arr[] = {1,2,3};
}

public class C1102개념10_클래스배열_주소 {
	public static void main(String[] args) {
		
		EE ee[] = new EE[3];
		//main에 ee가 생기고 = x
		//heap에 머리 3개가 생긴다. = x 
		
		for(int i = 0; i < ee.length; i++) {
			ee[i] = new EE();
			//heap에 arr3개가 생긴다. 
		}
		
		EE test1 = new EE();
		//main에 test1이 생기고 
		//heap에 ee가 생김 
		int arr[] = {4,5,6};
		
		
		test1.arr = arr; //GC 삭제됨 
		
		ee[1] = test1;
		
		arr[1] = 100;
		
		// 실행 전 예상하기
		for(int i = 0; i < ee.length; i++) {
			System.out.println(Arrays.toString(ee[i].arr));
		}
		
	}
}

  • 메모리 


 

반응형