Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

노승현

컬렉션 프레임워크 본문

JAVA/개념공부

컬렉션 프레임워크

nsh95 2023. 12. 7. 22:05

[컬렉션 프레임워크]

프레임워크
ex) 컬렉션, Spring, Mybatis, JPA, ...
뼈대, 틀, 구조, ...
개발자들에게 뼈대를 제공해주겠다. 라는 컨셉
개발 편의성을 제공
"하라는대로, 쓰라는대로"

1) 개발자들의 실력이 상향 평준화
2) 유지보수 용이 ★

컬렉션 프레임워크

배열같은 자료형(자료구조)들을 제공하는 라이브러리
JAVA에서 기본 제공해줌
[배열리스트], [맵], 링크리스트, 집합, 트리, ...

배열리스트
향상된 배열
서로 관련된 데이터들을 저장할 수 있는 자료형
같은 자료형 x -> 서로 다른 자료형들을 
같은 공간(메모리)에 저장하는게 맞나?
저장할 개수 x

같은 자료형 저장을 "강제" 해야겠어
"제네릭"

결론) 배열리스트는 반드시 제네릭과 함께 사용해야한다.

 

 

접근 제어자 종류

 

1) public : 모든 메서드 사용할 코드에 사용

2) private : 모든 멤버변수에 사용해야 한다.

 

JAVA의 모든 멤버변수는 private으로 보호해야한다.
외부에서의 직접 접근을 막아야함
"캡슐화(정보은닉)"
접근 제어자 private 키워드를 작성

감춰진 멤버변수의 값을 받아오는 메서드 getter()
감춰진 멤버변수에게 값을 부여하는 메서드 setter()

※ 체크리스트
1. 변수명,함수명,클래스명
2. 들여쓰기, 주석 -> 코드 가독성
3. 한글 코딩, 설계
4. 유효성 검사
아예 이상한 입력
데이터 상태에 따라 다른 출력 화면
경계값 검사 0~100 0 101
5. 모듈화 : input, output
6. 코드 재사용성이 높은 코드인지?
== 반복되는 코드가 적은지?
== 유지보수가 용이한 코드인지?

 

 

private 을 사용한 예시

package class03;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

// 학생부 프로그램
// CRUD
// 학생 추가 [관]
// 학생 목록 출력
// 1명 검색
// 1등 출력
// 학생 점수 변경 [관]	
// 학생 삭제 [관]

class Student {
// 접근 제어자
	//public 메서드
	// private 멤버변수
	private int num; // PK : 사용자가 선택 xxx 프로그램에서 설정 O
	private String name;
	private int score;
	private static Random random = new Random();

	Student(int num, String name) {
		this.num = num;
		this.name = name;
		this.score = Student.random.nextInt(101);
	}
	

	public int getNum() {
		return num;
	}


	public void setNum(int num) {
		this.num = num;
	}


	public String getName() {
		return name;
	}


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


	public int getScore() {
		return score;
	}


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


	@Override
	public String toString() {
		return "[" + this.num + "] " + this.name + "학생 " + this.score + "점";
	}
}

public class Test01 {

	public static int hasStudent(ArrayList<Student> datas, int num) {
		boolean flag = false;
		int i;
		for (i = 0; i < datas.size(); i++) {
			if (num == datas.get(i).getNum()) {
				// PK가 데이터들의 배열에서 찾은 학번과 같다면
				flag = true;
				break;
			}
		}

		if (!flag) {
			System.out.println("해당 번호의 학생은 없습니다...");
			i = -1;
		}

		return i;
	}

	public static void main(String[] args) {

		ArrayList<Student> datas = new ArrayList<Student>();

		int PK = 1001;
		datas.add(new Student(PK++, "샘플01"));
		datas.add(new Student(PK++, "샘플02"));

		// System.out.println(datas);

		Scanner sc = new Scanner(System.in);

		while (true) {
			System.out.println("1. 목록출력");
			System.out.println("2. 학생검색");
			System.out.println("3. 1등출력");
			System.out.println("0. 프로그램 종료");
			System.out.print("입력 >> ");
			int action = sc.nextInt();
			if (action == 0) {
				break;
			} else if (action == 777) {
				while (true) {
					System.out.println("=== 관리자 모드 ===");
					System.out.println("1. 학생추가");
					System.out.println("2. 정보변경");
					System.out.println("3. 학생삭제");
					System.out.println("0. 관리자 모드 종료");
					System.out.print("입력 >> ");
					action = sc.nextInt();
					if (action == 0) {
						break;
					} else if (action == 1) {
						System.out.println(PK + "번 학생을 추가합니다.");
						System.out.print("이름입력 >> ");
						String name = sc.next();
						datas.add(new Student(PK++, name));
						System.out.println("학생추가완료!");
					} else if (action == 2) {
						System.out.print("변경할 학생의 번호를 입력 >> ");
						int num = sc.nextInt();

						int i = hasStudent(datas, num);
						if (i < 0) {
							continue;
						}

						int score;
						while (true) {
							System.out.print("재설정할 점수를 입력 >> ");
							score = sc.nextInt();
							if (0 <= score && score <= 100) {
								break;
							}
							System.out.println("0~100점 사이로 입력해주세요!");
						}

						datas.get(i).setScore(score);
//						datas.get(0).set=100;
						// 멤버변수의 값을 main()
						// 객체코드 외부에서 접근이 가능한 상황
						// JAVA 는 public 이 default 상태
						// JAVA 의 모든 멤버변수는 private 설정해야됨!!!!!!!!

						System.out.println("정보변경완료!");
					} else if (action == 3) {
						System.out.print("삭제할 학생의 번호를 입력 >> ");
						int num = sc.nextInt();

						int i = hasStudent(datas, num);
						if (i < 0) {
							continue;
						}

						datas.remove(i); // 해당 위치의 학생 제거
						System.out.println("학생삭제완료!");
					} else {
						System.out.println("다시!");
					}
				}
			} else if (action == 1) {
				if (datas.size() == 0) {
					System.out.println("데이터없음");
					continue;
				}
				for (Student data : datas) {
					System.out.println(data);
				}
			} else if (action == 2) {
				System.out.print("학번입력 >> ");
				int num = sc.nextInt();
				boolean flag = false;
				for (Student data : datas) {
					if (data.getNum() == num) {
						System.out.println(data);
						flag = true;
						break;
					}
				}
				if (flag) {
					System.out.println("해당 학번은 검색결과가 없습니다...");
				}
			} else if (action == 3) {
				int maxIndex = 0;
				for (int i = 1; i < datas.size(); i++) {
					if (datas.get(maxIndex).getScore() < datas.get(i).getScore()) {
						// datas[maxIndex] == 학생 데이터
						// datas[maxIndex].score == 학생 점수 데이터
						maxIndex = i;
					}
				}
				System.out.println("1등은 " + datas.get(maxIndex) + "입니다.");
			} else {
				System.out.println("다시!");
			}
		}

	}

}

'JAVA > 개념공부' 카테고리의 다른 글

DTO,DAO 란?  (0) 2023.12.13
예외처리란?  (0) 2023.12.09
추상 클래스란?  (0) 2023.12.06
상속이란?  (0) 2023.12.01
Class 란? (2)  (0) 2023.12.01