쌍용교육센터 - 14일

개발자가 되고 싶어요 ㅣ 2024. 3. 7. 18:20

2024.03.07

Collection

https://tmddus3002.tistory.com/74

 

Collection 프레임워크

컬렉션 프레임워크 자바는 널리 알려져 있는 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 관련된 인터페이스와 클래스들을 java.util 패키지에 포함시켜 놓았다. 이들

tmddus3002.tistory.com

  • 자바에서 얘기하는 Java Collections Framework는 객체들을 한 곳에 모아 관리하고 또 그것을 편하게 사용하기 위해 제공되는 환경이다.

List

리스트(list)는 데이터를 1차원으로 늘어놓은 형태의 자료구조를 말한다. 1차원 형태로 데이터를 저장하는 방법으로는 배열도 있지만, 리스트는 배열과는 달리 데이터의 검색과 추가, 삭제가 가능하다.

Stack

스택(stack)은 배낭에 물건을 넣을 때처럼 제일 마지막에 넣은 데이터부터 순서대로 꺼낼 수 있는 자료구조를 말한다. 이렇게 가장 나중에 넣었던 데이터를 가장 먼저 꺼내는 입출력 방식을 LIFO(Last-In First-Out)방식이라고 한다.

Queue

큐(queue)는 매표소에 줄을 서서 기다리는 사람들처럼 들어온 순서대로 데이터를 꺼낼 수 있는 자료구조. 가장 처음에 넣었던 데이터를 가장 먼저 꺼내는 입출력 방식을 FIFO(First-InFirst-Out)방식이라고 한다.

Set

Set내에 저장되는 객체들은 특별한 기준에 맞춰서 정렬되지 않는다. 그리고 저장되는 객체들간의 중복된 요소가 발생하지 못하도록 내부적으로 관리되고 있다.

Map

Key와 Value를 매핑하는 객체이다. 여기에 사용되는 Key는 절대 중복될 수 없으며 각 Key는1개의 Value만 매핑할 수 있다. 정렬의 기준이 없으며 이는 마치 각 Value에 열쇠 고리를 달아서 큰 주머니에 넣어두고 오로지 Key로 각 Value를 참조 할 수 있도록 둔 구조라 할 수 있다.

 

실습

입력을 통해 회원을 등록하고 출력을 통해 회원 정보를 조회하는 간단한 프로그램을 만들어보려고 한다. 일단 Member객체를 만들고 이름,나이,직업,주소,전화번호를 만들어 준다. 그 후 생성자와 getter setter를 작성해줬다.

public class Member {
	private String name;//이름
	private int age;//나이
	private String job;//직업
	private String address;//주소
	private String phone;//전화번호
	
	//생성자
	public Member() {
	}
	public Member(String name, int age, String job, String address, String phone) {
		super();
		this.name = name;
		this.age = age;
		this.job = job;
		this.address = address;
		this.phone = phone;
	}
	
	// getter setter
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
}

그 후 다른 클래스를 만들어 MemberMain이라는 클래스를 만들어 멤버 인스턴스로 필요한 객체를 선언해주고 예외 처리를 위한 try catch문을 작성하여 callMenu()메서드를 실행해준다.

public static void main(String[] args) {
		new MemberMain();
	}
public MemberMain() {
		list = new ArrayList<Member>();
		try {
			br = new BufferedReader(new InputStreamReader(System.in));
			callMenu();
		} catch(Exception e) {
			e.printStackTrace();
		} finally {
			if(br!=null) {
				try {
					br.close();
				} catch(IOException e) {
					
				}
			}
		}
	}

callMenu()는 정보를 입력할지 출력할지 종료할지 1~3 숫자로 작성할 수 있게 만들어진 메서드다.

public void callMenu() throws IOException{
		force:
			while(true) {
				System.out.print("1: 회원정보 입력, 2: 회원정보 출력, 3: 종료> ");
				try {
					switch(Integer.parseInt(br.readLine())) {
					case 1:
						register();
						break;
					case 2:
						printUserInfo();
						break;
					case 3:
						System.out.println("프로그램 종료합니다.");
						break force;
					default:
						System.out.println("잘못 입력하셨습니다.");
					}
				}
				catch(NumberFormatException e) {
					System.out.println("숫자만 입력해주세요.");
				}
			}
	}

회원정보를 등록하는 메서드에는 사용자 정의 예외를 만들어서 조건(나이는 1살 이상만 입력)을 처리해줬다.

public void register() throws IOException{
		Member member = new Member();
		
		//이름 나이 직업 주소 전화번호
		
		System.out.print("이름: ");
		member.setName(br.readLine());
		
		System.out.print("나이: ");
		while(true) {
			int age = Integer.parseInt(br.readLine());
			try {
				if(age<1) {
					throw new AgeException("나이는 1살 이상만 입력해주세요.");
				} else {
					member.setAge(age);
					break;
				}
			} catch(AgeException e) {
				System.out.println(e.getMessage());
				System.out.print("나이: ");
			} catch(NumberFormatException e) {
				System.out.println("숫자만 입력해주세요.");
			}
		}
//사용자 정의 예외
class AgeException extends Exception{
	public AgeException(String str) {
		super(str);
	}
}

사용자 정의 예외를 만드는 방법 이외에도 메서드로 처리할 수 도 있다.

public int parseInputData(String item) throws IOException{
		while(true) {
			System.out.println(item);
			try {
				int age = Integer.parseInt(br.readLine());
				if(age<=0) {
					System.out.println("나이는 1살 이상 입력 가능");
					continue;
				}
				return age;
			} catch(NumberFormatException e) {
				System.out.println("숫자만 입력 가능");
			}
		}
	}

회원정보 출력을 하면 foreach문을 통해 list에 담아둔 member들의 정보를 getter메서드를 통해 출력한다.

public void printUserInfo() {
		System.out.printf("총 %d명의 회원을 조회합니다.%n",list.size());
		System.out.println("이름\\t나이\\t직업\\t주소\\t전화번호");
		System.out.println("------------------------------------");
		for(Member member: list) {
			System.out.print(member.getName()+"\\t");
			System.out.print(member.getAge()+"\\t");
			System.out.print(member.getJob()+"\\t");
			System.out.print(member.getAddress()+"\\t");
			System.out.println(member.getPhone());
		}
	}

'IT 국비 교육' 카테고리의 다른 글

쌍용교육센터 - 16일  (0) 2024.03.11
쌍용교육센터 - 15일  (1) 2024.03.08
쌍용교육센터 - 13일  (1) 2024.03.06
쌍용교육센터 - 12일  (0) 2024.03.05
쌍용교육센터 - 11일  (0) 2024.03.04