재밌고 어려운 IT를 이해해보자~!
컬렉션 프레임워크 (Collection Framework) 본문
컬렉션 프레임워크란?
데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것
ex) 컬렉션,Spring, Mybatis,JPA,....
뼈대, 틀, 구조, ...abstract
개발자들에게 뼈대를 제공해주겠다. 라는 컨셉이다.
개발 편의성을 제공
장점
1) 개발자들의 실력이 상향 평준화
2) 유지보수 용이 ★ 최고목표 ★
컬렉션 프레임워크
배열같은 자료형(자료구조)들을 제공하는 라이브러리
JAVA에서 기본 제공해줌
[배열리스트], 링크리스트, 집합, [맵], 트리, ..........
배열리스트란
향상된 배열
서로 관련된 데이터들을 저장할수있는 자료형
같은 자료형 X == > 서로다른 자료형들을 같은 공간(메모리)에 저장하는게 맞나 ?
별로 효율이 좋을 것 같지 않다.
==> 같은 자료형 저장을 "강제" !!!!!! 하는것이 바로 제네릭이다.
결론) 배열리스트는 반드시 제네릭과 함께 사용해야한다!!!!
리스트가 가지고 있는 메서드는 무지많다.
배열보다 완전좋음!
public class Test01 {
public static void main(String[] args) {
ArrayList<Integer> datas = new ArrayList<Integer>(); // 강제중
datas.add(190);
System.out.println(datas);
datas.add(0, 11);
datas.add(1, 13);
datas.add(0, 5);
boolean ans = datas.contains(13);
boolean ans2 = datas.contains(50);
System.out.println(ans);
System.out.println(ans2);
System.out.println(datas.get(0));
System.out.println(datas.isEmpty());
datas.remove(0);
System.out.println(datas);
System.out.println(datas.size());
datas.clear();
System.out.println(datas); //헉 주소값을 알려주지않고 공백을 보여준다!!
}
}
리스트 활용
package class01;
import java.util.ArrayList;
import java.util.Random;
public class Test02 {
public static void main(String[] args) {
Random rand = new Random();
int ranNum = rand.nextInt(21) + 10;
int total=0;
double avg=0;
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 1; i < ranNum; i++) {
if (i % 2 != 0) {
list.add(i);
}
}
for (int i = 0; i < list.size(); i++) {
total += list.get(i);
}
avg = total*1.0/list.size();
System.out.println(list);
System.out.println(total);
System.out.printf("%.02f",avg);
}
}
Private, Getter, Setter
Private -> 접근제어자 보통 메서드는 public 멤버변수는 private으로 보호한다.
JAVA의 모든 멤버변수는 private으로 보호해야하고 외부에서의 직접 접근을 막아야한다.
"캡슐화(정보은닉)" 을 위해서 접근제어자 private 키워드를 작성
감춰진 멤버변수의 값을 받아오는 메서드 getter()
감춰진 멤버변수에게 값을 부여하는 메서드를 setter().
getter setter를 통해서 접근할 수 있으면 어떤 보호가 되는건가 ?!
바로 모든 메서드는 기록이 남기 때문에 !! getter setter을 통해서만 멤버변수를 접근하고 조작해야한다.
Private, Getter, Setter을 활용한 학생부 프로그램 ( 관리자 존재 )
package class01;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
// 학생부 프로그램
// CRUD
// 학생 추가 [관]
// 학생 목록 출력
// 1명 검색
// 1등 출력
// 학생 점수 변경 [관]
// 학생 삭제 [관]
class Student{
//접근제어자
// public 메서드
// priavet 멤버변수
// JAVA의 모든 멤버변수는 private으로 보호해야함
// 외부에서의 직접 접근을 막아야함
// "캡슐화(정보은닉)"
// 접근제어자 private 키워드를 작성
// 감춰진 멤버변수의 값을 받아오는 메서드 getter()
// 감춰진 멤버변수에게 값을 부여하는 메서드를 setter()
// 모든 메서드는 기록이 남기 때문에 getter setter을 통해서만 멤버변수를 조작해야한다.
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);
}
//get멤버변수명()
//set멤버변수명()
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 Test03 {
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()) {
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);
//멤버변수 값을 main() 에서
// 객체코드 외부에서 접근이 가능하다.
// JAVA 는 디폴트가 public 상태
// 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("다시!");
}
}
}
}
'코리아IT핀테크과정' 카테고리의 다른 글
DTO (Data Transfer Object) DAO (Data Access Object) (0) | 2023.12.12 |
---|---|
MVC design pattern (0) | 2023.12.12 |
추상클래스 (abstract class), 인터페이스 (Interface) (2) | 2023.12.06 |
상속을 이용한 CRU 설계 및 제작 (0) | 2023.12.03 |
상속(Inheritance) (2) | 2023.12.01 |