자바13일차

달달한스위츠·2024년 2월 20일

자바배우기

목록 보기
13/43

오늘의 코드

package edu.java.collection01;

import java.util.ArrayList;
import java.util.List;

// * List<> 클래스
// - 배열과 같은 역할을 Generic 클래스로 생성한 형태
// - 배열은 저장되는 크기를 지정해야하지만, List는 저장의 한계가 없음
// - 추가하는 만큼 저장 공간을 늘려줌
// - 주요 메소드 : 
//	 add() : 원소 추가
//	 get() : 원소 읽기
//	 set() : 원소 변경
//	 remove() : 원소 삭제
public class ListMain01 {

	public static void main(String[] args) {
	int[] list1 = new int[3];
	list1[0] = 1;
	System.out.println(list1.length);
	// 배열의 길이는 데이터가 저장된 개수와 상광없이 고정
	// 배열에 저장된 데이터의 개수를 확인하기 어려움
	
	List<Integer> list2 = new ArrayList<>(); // 다형성 및 상속관계가 성립 된다.
	
	System.out.println(list2.size());
	
	// ArrayList에 원소(element) 추가 : add() 메소드 사용
	list2.add(100); // index = 0
	list2.add(200); // index = 1
	list2.add(300); // index = 2
	list2.add(400); // index = 3
	
	System.out.println("리스트 크기 : " + list2.size());
	
	// ArrayList에 있는 원소 참조(읽기) : get(index) 메소드 사용
	System.out.println(list2.get(0));
	System.out.println(list2.get(2));
	
	System.out.println();
	
	// for-each()
	// for(원소타입 변수이름 : 배열 쪼는 컬렉션) {...}
	for(int n : list2) {
		System.out.println(n);
	} // 두개의 타입이 다르지만 작용하는 이유는 Integer때문
	
	System.out.println();
	// ArrayList에서 특정 인덱스의 원소를 변경 : set(index, value)
	list2.set(0, 1);
	list2.set(2, 1234);
	for(Integer n : list2) {
		System.out.println(n);
	}
	
	System.out.println();
	// ArrayList에서 특정 인덱스의 원소를 삭제 : remove(index)
	list2.remove(1);
	System.out.println("리스트 크기 : " + list2.size());
	for(int i =0; i < list2.size(); i++) {
		System.out.println("index : " + i + ", value : " + list2.get(i));
	}

	} // end main()

} // end ListMain01
package edu.java.collection02;

import java.util.ArrayList;

class Student {
	// 멤버 변수
	private int stuNo;
	private String name;
	
	public Student() {}

	public Student(int stuNo, String name) {
		super();
		this.stuNo = stuNo;
		this.name = name;
	}

	@Override
	public String toString() {
		return "Student [stuNo=" + stuNo + ", name=" + name + "]";
	}
	
	
}
public class ListMain02 {

	public static void main(String[] args) {
		ArrayList<Integer> list1 = new ArrayList<Integer>();
		list1.add(100);
		
		ArrayList<String> list2 = new ArrayList<String>();
		list2.add("test");
		
		// Student 타입을 지정할 수 있는 ArrayList 인스턴스 생성
		ArrayList<Student> list3 = new ArrayList<>();
		
		list3.add(new Student(1, "kim")); // 형변환시켜 주어야 한다는 것 까지 생각을 해야 한다.
		Student stu1 = new Student(2, "park");
		list3.add(stu1);
		
		for(int i = 0; i < list3.size(); i++) {
			System.out.println(list3.get(i));
		}
		
	} // end main()

} // end ListMain02
package edu.java.collection03;

import java.util.LinkedList;
import java.util.List;

//Collection<E> : 자료(데이터)를 저장하기 위한 Generic 클래스
//|_ List<E>, Set<E>
//|_ Map<K, V>

//List<E>
//1. 자료들이 저장되는 순서가 중요 -> 인덱스 사용
//2. 중복된 값들의 저장을 허용

//List<E>
//|_ ArrayList<E>, LinkedList<E>

//ArrayList<E>
//	1. 내부적으로 배열 자료구조를 사용
//	2. 저장 용량을 늘리는데 많은 시간이 소요됨 - 단점
//	3. 저장된 데이터를 삭제하는데 많은 시간이 소요됨 - 단점
//	4. 데이터 참조(검색)할 때 매우 빠름 - 장점

//LinkedList<E>
//	1. 내부적으로 Linked List 자료구조를 사용
//	2. 저장 용량을 늘리는 과정이 매우 간단 - 장점
//	3. 저장된 데이터를 삭제하는 과정이 매우 간단 - 장점
//	4. 데이터를 참조(검색)하는 시간이 매우 느림 - 단점

//ArrayList<E>, LinkedList<E>에서 사용되는 메소드들 :
//- add(element), get(index), set(index, element), remove(index)


public class CollectionMain03 {

	public static void main(String[] args) {
		// String을 저장할 수 있는 Linked 객체 생성
		List<String> list = new LinkedList<>();
		
		list.add("화요일");
		list.add("내일은");
		list.add("수요일입니다. ㅠㅠ");
		
		for(String x : list) {
			System.out.println(x);
		}
		
		list.set(2, "금요일가즈아~~~");
		for(String x : list) {
			System.out.println(x);
		}
		
		
	} // end main()

} // end CollectionMain03
package edu.java.collection04;

public class Score {
	private int math;
	private int eng;

	public Score() {
	}

	public Score(int math, int eng) {
		super();
		this.math = math;
		this.eng = eng;
	}

	@Override
	public String toString() {
		return "Score [math=" + math + ", eng=" + eng + "]";
	}

	public int getMath() {
		return math;
	}

	public void setMath(int math) {
		this.math = math;
	}

	public int getEng() {
		return eng;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

}
package edu.java.collection04;

public class Student {
	private String name;
	private Score score;

	public Student() {
	}

	public Student(String name, Score score) {
		super();
		this.name = name;
		this.score = score;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", score=" + score + "]";
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Score getScore() {
		return score;
	}

	public void setScore(Score score) {
		this.score = score;
	}

}
package edu.java.collection04;

import java.util.*;

public class CollectionMain04 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		List<Student> list = new ArrayList<>();
		Score score = new Score();
		Student student = new Student();
		
		// 학생 정보(이름, 점수) 3개 입력받아 list에 저장
		// 학생 정보를 입력받는다. 입력받은 정보를 Student 객체에 저장
		// 저장된 Student를 list에 추가한다.
		for (int i = 0; i < 3; i++){
			System.out.println("학생 이름 >");
			String name = sc.next();
			System.out.println("학생 수학 점수 >");
			int mat = sc.nextInt();
			System.out.println("학생 영어 점수 >");
			int eng = sc.nextInt();
			
			score = new Score(mat, eng);
			student = new Student(name, score);
			list.add(student);
		}
		
//		for (int i = 0; i < 3; i++){
//			System.out.println("학생 이름 >");
//			student.setName(sc.next());
//			System.out.println("학생 수학 점수 >");
//			score.setMath(sc.nextInt());
//			System.out.println("학생 영어 점수 >");
//			score.setEng(sc.nextInt());
//			student.setScore(score);
//			list.add(student);
//		}
		
		// 전체 데이터 검색(출력)
		for(int i = 0; i < list.size(); i++) {
			student = list.get(i);
			System.out.println("이름 : " + student.getName());
			System.out.println("수학 : " + student.getScore().getMath());
			System.out.println("영어 : " + student.getScore().getEng());
		}
		
		// 데이터 수정
		// -1번 인덱스의 학생의 정보를 변경
		// 예시) 이름 : 둘리
		// 		수학 : 100
		// 		영어 : 50
		String name = "둘리";
		int mat = 100;
		int eng = 50;
		score = new Score(mat, eng);
		student = new Student(name, score);
		list.set(1, student);
		
		
		// - 0번 인덱스 학생의 영어 점수만 변경
		System.out.println("0번 인덱스 학생 영어 점수 >");
		eng = sc.nextInt();
		score = new Score(mat, eng);
		student = new Student(name, score);
		list.set(0, student);
		
		
		// 변경된 리스트의 모든 데이터 출력
		for(int i = 0; i < list.size(); i++) {
			student = list.get(i);
			System.out.println("이름 : " + student.getName());
			System.out.println("수학 : " + student.getScore().getMath());
			System.out.println("영어 : " + student.getScore().getEng());
		}
		
		// 데이터 삭제 : 1번 인덱스 학생의 모든 정보 삭제
		list.remove(1);
		
		sc.close();
	} // end main()

} // end CollectionMain04

연락처 프로그램 ver0.3

연락처 프로그램 ver0.2를 이용하여 아래 기능 구현
1. ContactVO[] list -> ArrayList list 로 변경
2. 연락처 삭제 기능 추가

package edu.java.contact03;

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

// MVC 디자인 패턴에서 View 클래스
// - UI를 담당하는 역활
// * 현재 시스템은 규모가 작으므로 Controller 역활도 수행
public class ContactMain03 {
	private static Scanner sc;
	private static ContactDAO dao; // ContactDAOImple 인스턴스를 저장할 변수

	public static void main(String[] args) {

		System.out.println("연락처 등록 메뉴");
		sc = new Scanner(System.in);

		dao = ContactDAOImple.getInstance(); // 다형성. 싱글톤 인스턴스 생성

		boolean run = true;
		while (run) {
			showMainMenu();
			try {
				int choice = sc.nextInt();
				switch (choice) {
				case Menu.INSERT:
					InsertMember();
					break;
				case Menu.SELECT_ALL:
					selectAll();
					break;
				case Menu.SELECT_BY_INDEX:
					selectByIndax();
					break;
				case Menu.UPDATE:
					updateMember();
					break;
				case Menu.DELETE:
					deleteMamber();
					break;
				case Menu.QUIT:
					sc.close();
					run = false;
					break;
				default:
					System.out.println("다시 선택하세요.");
					break;
				}
			} catch (InputMismatchException e) {
				System.out.println("올바른 선택이 아닙니다. 숫자를 입력하세요.");
				sc.next(); // Clear the invalid input
			} catch (Exception e) {
				System.out.println("오류가 발생했습니다: " + e.getMessage());
			}

		}

	} // end main()

	private static void deleteMamber() {
		System.out.println("검색할 인덱스 입력>");
		int index = sc.nextInt();

		int count = ((ContactDAOImple) dao).getCount();
		if (index >= 0 && index < count) {
			int result = dao.delete(index);
			if (result == 1) {
				System.out.println("연락처 정보 삭제 완료");
			}
		} else {
			System.out.println("존재하지 않는 인덱스입니다.");
		}
	} // end deleteMamber()

	private static void updateMember() {
		System.out.println("인덱스 입력>");
		int index = sc.nextInt();

		int count = ((ContactDAOImple) dao).getCount();
		if (index >= 0 && index < count) {
			System.out.println("전화번호 입력>");
			String phone = sc.next();

			System.out.println("이메일 입력>");
			String email = sc.next();

			ContactDTO dto = new ContactDTO("", phone, email);
			int result = dao.update(index, dto);
			if (result == 1) {
				System.out.println("연락처 정보 수정 완료");
			}

		}
	} // end updateMember()

	private static void selectByIndax() {
		System.out.println("검색할 인덱스 입력>");
		int index = sc.nextInt();

		int count = ((ContactDAOImple) dao).getCount();
		if (index >= 0 && index < count) {
			ContactDTO dto = dao.select(index);
			System.out.println(dto);
		} else {
			System.out.println("존재하지 않는 인덱스입니다.");
		}
	} // end selectByIndax()

	private static void selectAll() {
		ArrayList<ContactDTO> list = dao.select();

		int count = ((ContactDAOImple) dao).getCount();
		for (int i = 0; i < count; i++) {
			System.out.println("연락처 정보 [" + i + "]");
			System.out.println(list.get(i));
		}

	} // end selectAll()

	private static void InsertMember() {
		System.out.println("--- 연락처 정보 등록 ---");
		System.out.println("이름 입력>");
		String name = sc.next();
		System.out.println("전화번호 입력>");
		String phone = sc.next();
		System.out.println("이메일 입력>");
		String email = sc.next();

		ContactDTO dto = new ContactDTO(name, phone, email);
		dao.insert(dto);

	} // end InsertMember()

	private static void showMainMenu() {
		System.out.println("------------------------------------------------");
		System.out.println("1. 등록 | 2. 전체 검색 | 3. 상세 검색 | 4. 수정 | 5.삭제 | 0. 종료");
		System.out.println("------------------------------------------------");
		System.out.println("선택>");

	} // end showMainMenu()

} // end MemberMain
package edu.java.contact03;

import java.util.ArrayList;

public class ContactDAOImple implements ContactDAO {
	// 1. private static 자기 자신 타입의 변수 선언
	private static ContactDAOImple instance = null;

	// 2. private 생성자
	private ContactDAOImple() {
	}

	// 3. public static 메소드 - 인스턴스를 리턴하는 메소드 구현
	public static ContactDAOImple getInstance() {
		if (instance == null) {
			instance = new ContactDAOImple();
		}
		return instance;
	}

	// 나중에 DB에서 사용 할 것이지만 지금은 이렇게 사용
	private ArrayList<ContactDTO> list = new ArrayList<>(); // 회원 정보를 저장할 배열

	public int getCount() {
		return list.size();
	}

	@Override
	public int insert(ContactDTO dto) {
		System.out.println("insert()"); // 로그 찍기
		System.out.println("dto = " + dto);
		list.add(dto);
		return 1; // 0 : 실패, 1 : 성공
	}

	@Override
	public ArrayList<ContactDTO> select() {
		return list;
	} // end select()

	@Override
	public ContactDTO select(int index) {
		return list.get(index);
	}

	@Override
	public int update(int index, ContactDTO dto) {
		list.set(index, dto);
		return 1;
	}

	@Override
	public int delete(int index) {
		list.remove(index);
		return 1;
	}

} // end ContactDAOImple
package edu.java.contact03;

import java.util.ArrayList;

public interface ContactDAO {
	// 연락처 정보 등록
	public abstract int insert(ContactDTO dto);

	// 연락처 정보 전체 검색
	public abstract ArrayList<ContactDTO> select();
	
	// 연락처 정보 인덱스 검색
	public abstract ContactDTO select(int index);

	// 연락처 정보 인덱스 수정
	public abstract int update(int index, ContactDTO dto);
	
	// 연락처 삭제 인덱스
	public abstract int delete(int index);
	
} // end ContactDAO

0개의 댓글