1. 자료구조 클래스 : 다수의 데이터를 효율적으로 관리(저장, 삭제, 변경)하는 기능을 제공하는 클래스
set | 저장순서가 없으며, 동일한 정보의 인스턴스 저장이 불가능함 (즉, 꺼내올때 내가 원하는 대로 꺼내오지 못함) |
hashSet, LinkedHashSet, TreeSet | |
List |
저장순서가 있으며, 첨자를 이용하여 처리한다. 중복 인스턴스 저장이 가능하다. |
AraArrayList, Vector, LinkedList 등 | |
Map |
키(key)와 값을 하나의 쌍(Entry)으로 묶어서 관리하는 자료구조 클래스 -키를 이용하여 값을 빠르게 검색하기 위해 사용한다. -키는 중복저장되지 않으며 저장순서가 없다. |
HashMap, Hashtable |
1) Set클래스
Set클래스에서 주로 사용하는 메소드
add() | 해당 요소를 저장하는 메소드 |
remove() | 해당 요소를 삭제하는 메소드 |
size() | 저장된 요소의 갯수를 반환하는 메소드 |
★ Iterator() | -일괄 반복처리를 하고 싶을때 사용함 -내부적으로 커서를 만들어놓고 요소를 하나하나 읽어낸다. -set 인스턴스를 반복처리 하기 위한 Iterator인스턴스를 반환하는 메소드 |
변형된 for문이 내부적으로 iteratpr인스턴스를 이용하여 반복처리 하는 것이기 때문에 요즘에는 변형된 for문을 더 자주 사용한다. | |
★ toArray() |
set 인스턴스를 배열로 변환하여 반환하는 메소드 |
public class SetApp {
public static void main(String[] args) {
//제네릭을 사용하지 않을경우, 기본적으로 오브젝트 타입으로 설정됨
//=> 모든 인스턴스를 전달받아 Set 인스턴스에 저장가능
HashSet set = new HashSet(); 이방법은 대부분 사용하지 않음
//제네릭을 사용하여 인스턴스를 생성함
//=>제네릭으로 전달된 클래스의 인스턴스만 저장이 가능함
HashSet<String> set = new HashSet<String>();
//참조변수는 인터페이스를 이용하여 만드는 것을 권장함 -> 유지보수가 좋아진다(결합도를 낮추므로)
//=>인터페이스를 상속받은 모든 자식인스턴스 저장가능
Set<String> set = new HashSet<String>();
Set<String> set2 = new TreeSet<String>(); //둘다 가능해짐
//Set.add(E element) : element를 추가하는 메소드
//=> E : 제네릭인스턴스
set.add("Happy Day");
}
}
while (iterator.hasNext()) {
//=> 현재 위치의 요소를 반환하며, 다음위치의 요소로 이동하는 메소드
System.out.print(iterator.next() + " ");
}
//변형된 for구문은 내부적으로 iterator인스턴스를 이용해서 반복처리한다. 그래서 주로 이것을 많이 이용
for(String name : set) {
System.out.print(name + " ");
}
Integer[] lotto = lottoSet.toArray(new Integer[0]); //순서가 없기 때문에 배열로 바꿔주는거임
2) List클래스
List클래스에서 주로 사용하는 메소드
add() | 해당 요소를 저장하는 메소드 |
add(int index, E element) | 해당 요소를 삭제하는 메소드원하는 요소를 원하는 위치에 삽입하는 메소드 |
remove(Object) | 전달된 요소의 동일한 요소를 제거하는 메소드 -동일한 요소가 여러개 저장된 경우, 앞에 위치한 요소만 제거된다. |
remove(index) | 해당 인덱스 위치에 존재하는 요소를 삭제하는 메소드 |
size() |
저장된 요소의 갯수를 반환하는 메소드 |
get() | 첨자위치의 요소를 반환하는 메소드 |
Collections.sort() | 전달받은리스트 인스턴스 요소를 정렬하는 메소드 |
clear() | list 인스턴스 모든 요소를 제거하는 메소드 |
isEmpty() | 요소가 있는 경우 false, 없는 경우 true를 반환하는 메소드 |
Arrays.asList() | -일종의 초기화시켜주는 방법이다. -요소를 전달받아, 배열을 list인스턴스로 변환하여 반환하는 메소드 |
Iterator() | 내부적으로 커서를 만들어놓고 요소를 하나하나 읽어낸다. |
set() | 원하는 위치의 요소를 변경하는 메소드 |
List를 이용한 Student정보를 관리프로그램 만들어보기
1. 학생정보(학번,이름)를 저장하기 위한 클래스 - VO(Value Object) 클래스
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
package site.itwill.util;
//인스턴스 필드값을 비교하기 위해서는 Comparable<T> 인터페이스를 상속받아 사용하면 됨
//=> 제네릭에서 비교하고자 하는 인스턴스의 클래스를 전달하여 작성
//=> CompareTo(T o) 메소드를 오버라이드 선언해주어야한다.
//학생의 이름, 학번을 저장하기 위한 프로그램
public class Student implements Comparable<Student> {
private int num;
private String name ;
public Student() {
// TODO Auto-generated constructor stub
}
public Student(int num, String name) {
super();
this.num = num;
this.name = name;
}
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;
}
@Override
public String toString() {
return "[학번 = " + num + " , 이름 = " + name + "]";
}
//정렬하기 위한 비교 결과를 정수값으로 반환하는 메소드
//=>this의 필드값과 매개변수의 필드값을 빼기 연산하여 결과값을 반환.
//=> Collections.sort메소드를 사용하면 메소드 내부에서 호출되어 정렬의 기준값을 제공한다.
//=> 반환값이 양수인 경우, List인스턴스의 요소를 서로 바꾸어 저장
@Override
public int compareTo(Student o) {
//return this.num - o.num; // 학번 : 오름차순
//return o.num - this.num; // 학번 : 내림차순
return this.name.compareTo(o.name); //이름으로 오름차순(양수)
//return -(this.name.compareTo(o.name));
}
}
|
cs |
2. 학생정보를 관리(저장, 변경, 삭제, 검색)하기 위한 기능을 제공하는 클래스
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
package site.itwill.util;
import java.util.ArrayList;
import java.util.List;
//학생정보를 관리(저장, 변경, 삭제, 검색)하기 위한 기능을 제공하는 클래스
//=>BO(business object)클래스 or manager클래스 라고 한다.
public class StudentManager {
//다수의 학생정보를 저장하기 위한 콜렉션 필드를 만든다.
//=> 클래스 내부에서만 사용하기 위한 필드(시스템필드)
private List<Student> _studentList; //시스템필드라는 말!(setter,getter x)
public StudentManager() {
_studentList = new ArrayList<Student>();
}
/******인덱스를 반환하는 메소드******/
//학번을 전달받아 콜렉션 필드에 저장된 해당 학생정보의 첨자를 반환하는 메소드
//=>해당학번의 학생정보가 존재하지 않는 경우, -1을 반환
//=>클래스 내부에서만 접근 가능하도록 은닉화처리
private int getStudentIndex(int num) {
int index = -1;
for(int i = 0; i < _studentList.size(); i++) {
//전달받은 학번과 같은 학번의 학생정보가 존재할 경우 해당첨자를 저장한다.
if(_studentList.get(i).getNum() == num) {
index = i;
break;
}
}
return index;
}
/******데이터를 추가하는 메소드******/
//학생정보를 전달받아 Collections필드에 저장(추가)하는 메소드
//=>전달받은 학생정보가 콜렉션 필드에 저장되지 않을경우 false를 반환
//=> 저장될 경우 true를 반환한다.
//=> 전달받은 학생정보의 학번이 이미 컬렉션 필드에 저장된 경우, 미저장되지 않도록 처리
public boolean insertStudent(Student student) {
if(getStudentIndex(student.getNum()) != -1) {//존재하지 않는다면
return false;//flase반환
}
_studentList.add(student);
return true;
}
//학생정보를 전달받아 콜렉션 필드에 저장된 학생정보를 변경하는 메소드
// => 전달받은 학생정보가 변경되지 않을 경우 false를 반환
//-> 변경될 경우 true를 반환
//=>전달받은 학생정보의 학번이 콜레션필드에 저자오디어 있지 않을 경우 미변경
public boolean updateStudent(Student student) {
int index = getStudentIndex(student.getNum());
if(index == -1) return false; //학생이 없다.
_studentList.set(index, student);
return true;
}
//전달받은 학생정보를 전달받아 콜레션필드에 저장된 학생정보를 삭제하는 메소드
//=>전달받은 학번의 학생저오가 삭제되지 않을경우 false반환
//=>삭제될경우 true반환
//=>전달받은 학생정보가 콜레션 필드에 저장되어 있지 않을 경우 삭제되지 않도록 삽입
public boolean deleteStudent(int num) {
int index = getStudentIndex(num);
if(index == -1) {
return false;
}
_studentList.remove(index);
return true;
}
//학번을 전달받아 콜렉션필드에 저장된 학생정보를 검색하여 반환하는 메소드
//=> 저장되어 있지 않은 경우 null반환
//=> 저장되어 있는 경우 해당 학생 정보 반환
public Student selectStudent(int num) {
int index = getStudentIndex(num);
if(index == -1) {
return null;
}
return _studentList.get(index);
}
//콜렉션 필드에 저장된 모든 학생정보를 반환하는 메소드
public List<Student> selectAllStudent(){
return _studentList;
}
}
|
cs |
3. App 클래스
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
package site.itwill.util;
import java.util.Collections;
import java.util.List;
//학생정보 관리 프로그램
public class StudentManagerApp {
public static void main(String[] args) {
StudentManager manager = new StudentManager();
//학생정보를 생성하여 저장매체(콜렉션 필드)에 저장
manager.insertStudent(new Student(1000, "홍길동"));
manager.insertStudent(new Student(2000, "임꺽정"));
manager.insertStudent(new Student(3000, "전우치"));
manager.insertStudent(new Student(4000, "장길산"));
boolean result = manager.insertStudent(new Student(5000, "홍경례"));
if(result) {
System.out.println("[메세지] 성공적으로 저장되었습니다.");
}else {
System.out.println("[메세지] 이미 사용중인 학번이므로, 저장되지 않았습니다.");
}
System.out.println("=========================================");
//저장된 학생정보 중 학번이 2000인 학생정보를 검색하여 출력
Student findStudent = manager.selectStudent(2000);
if(findStudent == null) {
System.out.println("[메세지] 해당 학번의 학생정보를 찾을 수 없습니다.");
}else {
System.out.println(findStudent);
}
System.out.println("=========================================");
//학번이 2000인 학생의 이름을 [임걱정]으로 변경
findStudent.setName("임걱정");
if(manager.updateStudent(findStudent)) {
System.out.println("학생정보를 성공적으로 변경하였습니다.");
}else {
System.out.println("[메세지] 변경하고자 하는 학번의 학생정보를 찾을 수 없습니다.");
}
System.out.println("=========================================");
//학번이 4000인 학생정보를 삭제한다.
if(manager.deleteStudent(4000)) {
System.out.println("[메세지] 해당 학번의 학생정보를 삭제하였습니다.");
}else {
System.out.println("[메세지] 삭제하고자 하는 학번의 학생정보를 찾을 수 없습니다.");
}
System.out.println("=========================================");
List<Student> studentList = manager.selectAllStudent();
for(Student student : studentList) {
System.out.println(student);
}
System.out.println("=========================================");
//무엇을 가지고 비교를 해야하는지 모르기 때문에 아래와 같이 하면 안됨
Collections.sort(studentList);
for(Student student : studentList) {
System.out.println(student);
}
}
}
|
cs |
3) Map클래스 : 일괄처리가 중요하지않음. put과 get을 이용해 값을 제공하는것이 중요
- 검색할것이 수백개 수천개이면 if문 사용x -> map으로 만들면 금방 찾을 수 있다(웹애플리케이션찾을때!!)
map에서 주로 사용하는 메소드
put(K key) | 엔트리를 추가 key가 중복될 경우 값을 변경 |
get(K key) | key에 대한 값을 반환하는 메소드 |
remove() | key에대한 엔트리를 제거하는 메소드 |
keySet() | 모든 맵키(set 인스턴스)를 반환하는 메소드 |
values() | 맵에 저장된 모든 값을 컬렉션 인스턴스를 반환 (즉, 키말고 값만 가져옴) |
2. awt패키지(swing은 os마다 디자인이 똑같음 awt의 확장된 개념)
- GUI 프로그램을 개발하기 위한 참조형이 선언된 패키지
- GUI 프로그램 : 디자인(컴퍼넌트) + 이벤트처리(리스너) >> 이벤트 프로그램
컴포넌트 | 컨테이너 |
GUI프로그램의 디자인 구성요소를 표현하는 클래스 Button , Label,Canvas, CheckBox, Choice, List, Scrollbar, TextField, TextAre |
컴포넌트를 담을 수 있는 컴퍼넌트 컨테이너에 컴포넌트를 올려 사용하는 개념이라고 생각하면됨 frame, Window. Dailog, Panel, scrollPane |
GUI프로그램 작성방법 >> 디자인
- Frame 클래스를 상속받는 자식클래스를 작성한다.
- main메소드에서 자식클래스로 인스턴스를 생성한다.
- 자식클래스의 생성자에서 프레임의 디자인을 구현한다.(컴퍼넌트와 컨테이너 클래스를 이용하여 프레임에 담아 디자인)
package site.itwill.awt;
import java.awt.Frame;
//GuI 프로그램은 Frame클래스를 상속받아 작성하는 것을 권장!
public class FrameTwoApp extends Frame {
private static final long serialVersionUID = 1L;
//생성자를 이용하여 프레임에 대한 디자인 작업
public FrameTwoApp(String title) {
//super키워드를 이용하여 frame클래스 생성자 호출 : 제목 전달
super(title); //부모의 생성자에게 title을 전달한다.
setBounds(500,100,300,400);
setVisible(true);
}
public static void main(String[] args) {
//부모인스턴스 생성 후 자식 인스턴스 생성
//=> 프레임 인스턴스 생성 - 프레임 생성
new FrameTwoApp("프레임");
}
}
-extends Frame하여 상속받아 사용
-생성자에 super()를 이용하여 매개변수 전달하여 사용
-이렇게 FrameTwoApp을 만들어 두면, 다른곳에서 이 클래스의 인스턴스만 만들어도 프레임이 하나 만들어지게 되는것이므로 GUI는 상속을 이용하는 것을 권장한다.
Frame클래스에서 주로 사용하는 메소드
setSize() | 컴포넌트의 크기를 변경하는 메소드 -단위는 픽셀을 사용 |
setLocation() | 컴포넌트 출력 위치를 변경시켜주는 메소드 |
setBounds(int x, int y, int width, int weight) | 위치와, 사이즈를 한번에 셋팅해주는 메소드 |
setTitle() | 타이틀을 변경시켜 주는 메소드 |
setVisible() | 컴포넌트를 화면에 출력여부를 설정하는 메소드 |
setResizable(boolean b) |
프레임의 크기 변경여부를 설정 -false : 변경 불가, true : 변경가능 (기본) (프레임class에만 존재) |
setTitle(String name) |
프레임의 제목을 변경하는 메소드 (프레임class에만 존재) -애초에 frame생성자를 만들때 전달해서 만들 수 있음 |
'💻 수업정리 (2020) > 자바' 카테고리의 다른 글
[6/3] Menu만들기와, Swing이용해보기 (0) | 2020.06.03 |
---|---|
[6/2] LayoutManager과 EventHandler (0) | 2020.06.02 |
[5/29] java.util패키지 (0) | 2020.05.29 |
[5/28] java.lang패키지 (0) | 2020.05.28 |
[5/27] ★★★ 예외전달, 다중스레드 (0) | 2020.05.27 |