inner~wrapper~generic~model~collection
/*
* 다양한 형태의 클래스 선언 방법
* 1. 일반적인 선언 방법
* ==> 하나의 java 파일에 class 키워드를 작성하여 클래스 선언
* 2. 무명 클래스(anonymous) 선언
* ==> 이름이 없는 클래스 선언. //그리고 오류찾아서 오버라이딩하면 됨. 이러면 sub클래스 만들 필요가X
* interface 객체 생성 시 많이 사용됨.
* 3. 중첩 클래스(inner class) 선언
* ==> 클래스 안에 또 다른 클래스 선언.
*/
/*
* 3. 중첩 클래스 선언
*
* 중첩 클래스(Inner Class)?
* 1. 클래스 내부에 또 다른 클래스 선언.
* ==> 두 클래스가 서로 긴밀한 관계로 연결되어 있는 경우에 사용함.
* 두 클래스 멤버 간에 서로 쉽게 접근할 수 있다는 장점이 있음.
* 2. 내부 클래스를 하나의 멤버로 사용할 수 있음.
* 3. 클래스 멤버 : 멤버변수, 멤버메서드, 외부클래스, 내부클래스
* 4. 내부 클래스 객체 생성 방법
* 형식)
* 외부클래스명.내부클래스명 참조변수 =
* 외부클래스참조변수.new 내부클래스 생성자();
*
* [내부 클래스의 특징]
* - 내부 클래스는 외부 클래스의 멤버를 마치 자기 자신처럼 사용이 가능함.
* ==> 데이터 값을 변경시킬 수도 있음.
* 외부 클래스 멤버의 접근지정자가 private 접근지정자 일지라도 접근이 가능함.
* - 내부클래스의 접근은 반드시 외부 클래스를 통하여 접근해야 함.
*/
// 중첩 클래스 객체 생성 방법
// 1. 외부 클래스 객체가 먼저 생성이 되어야 함.
Outer outer = new Outer();
// 2. 내부 클래스 객체 생성
// 형식) 외부클래스명.내부클래스명 참조변수 = 외부클래스참조변수.new 내부클래스 생성자();
Outer.Inner inner = outer.new Inner();
inner.output();
/*
* wrapper class
* - wrap : 감싸다, 포장하다.
* - 기본자료형을 클래스 타입으로 포장해 놓은 클래스.
* - 기본자료형보다 객체로 저장하기 때문에 좀더 다양한 기능을 제공하기 위해서 사용함.
* - 기본 타입의 값을 내부에 두고 포장 하기 때문에 포장(wrapper) 클래스라고 하기도 함.
* - 기본자료형 : byte, short, long, float, double, boolean,
* char, int
* - wrapper class : Byte, Short, Long, Float, Double, Boolean,
* Character, Integer
*
* - wrapper class 사용 이유
* 1. 매개변수로 객체가 요구될 때
* 2. 기본형 값이 아니라 객체로 저장해야 할 때
* 3. 객체간 비교가 필요할 때
*
* ★★★★★★★★★★
* - wrapper class 를 사용하는 더 중요한 이유
* : 형변환이 자유롭다는 특징이 있음. // 참조변수. ctrl+space하면 형변환 자유로움
*/
ex) su1 = 10;
Integer in1 = new Integer(su1);
// 클래스 자료형
// 박싱(boxing) : 기본자료형 -> 클래스형(wrapper class)
// 언박싱(unboxing) : 클래스형 -> 기본자료형
//int sum = in1 + su2; // 예전에는 in1.intValue()로 바꿔야하는데 이제는 jvm이 자동으로 바꿔줌 ==> 오토박싱
// 형 변환이 자유로와짐 ==> System.out.println(in1.doubleValue());
// 숫자 -> 문자열
// toString() : 숫자 -> 문자열
// String.ValueOf(숫자) : 숫자 -> 문자열
// 문자열 -> 숫자
// Interger.parseInt()
//JOptionPane.showInputDialog("숫자입력"); // 문자열을 숫자로 바꿔야하는 대표적 예시
/*
* 제네릭(generic)?
* - 포괄적인, 총괄적인.
* - 특정한 클래스에 원하는 객체 타입을 지정하여 지정된 객체만 저장하게 하는 자바 문법.
* - 다양한 타입의 객체들을 다루는 메서드나 다음에 학습할 컬렉션에서 컴파일할 때 타입을 확인해 주는 기능.
* ==> 즉, 다루어질 객체의 타입을 미리 명시해 줌으로써 번거로운 형변환 작업을 줄여 준다는 장점이 있음.
* 또한 객체의 타입을 컴파일 시에 체크하여 주기 때문에 객체의 타입 안정성을 높여주는 장점도 있음.
* - 여기서의 타입의 안정성을 높여 준다는 것은 의도하지 않은 타입의 객체가 저장되는 것을 막고,
* 저장된 객체를 꺼내올 때 원래의 타입과 다른 타입으로 잘못 형변환되어 발생할 수 있는 오류를 줄여 줌
* - jdk 1.5 버전부터 추가된 기능.
* - 클래스 내부에서 사용할 데이터를 외부에서 지정하는 방법.
* - 데이터의 명확성과 안정성을 보장해 줌.
* ==> 다른 데이터 타입의 데이터가 들어올 경우 컴파일 시점에서 error 발생
*/
<> : 제네릭기호
@지금까지 제네릭 안에 <자료형타입, 클래스 > 들어갔음 *나머지 수업내용 참고
/*
* 컬렉션 프레임워크
* - 컬렉션의 사전적 의미 : 수집해서 모으다, 저장한다는 의미.
* - 자바에서 컬렉션은 데이터의 추가, 수정, 삭제, 검색 등을 효과적으로 제공해 주는 자료 구조 관련 클래스.
* ==> 값을 담을 수 있는 그릇을 의미함(컨테이너 개념).
* - java.util 패키지에 포함되어 있음.
* - 인터페이스를 통해서 정형화된 방법으로 다양한 컬렉션 클래스를 이용.
*
* - 컬렉션 프레임워크
* 1) 컬렉션을 표준화하여 설계해 놓은 인터페이스
* 2) List 계열, Set 계열, Map 계열
*/
/*
* ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
* 1. List 계열의 컬렉션 프레임워크의 특징
* - 자료의 순서가 보장(index) : 정렬 기능 제공.
* - 중복 데이터가 허용.
* - List 인터페이스의 자식클래스로 구현
* ==> ArrayList(O), LinkedList(가끔), Vector(X)
* - 특히 DB에 데이터를 레코드 단위로 저장하거나 저장된 데이터를 가져을 경우 많이 사용이 됨.
* ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
*/
// List계열 컬렉션 객체 생성
// List계열 컬렉션 객체 생성 List<String> list = new ArrayList<>();
// list는 인터페이스임 그래서 객체생성 못하고 다형성 이용하여 자식클래스로 객체생성 (다형성)
1. add("값")
==> ArrayList에 데이터를 추가하는 메서드.
list.add("홍길동");
2. size()
==> 데이터의 크기를 정수값으로 반환해 주는 메서드
list.size() // 배열은 length, arrayList는 size
3. get(index)
==> ArrayList에 저장되어 있는 데이터를 출력해 주는 메서드.
4. clear()
==> ArrayList의 모든 데이터를 제거하는 메서드.
list.clear();
5. remove(index)
==> ArrayList의 특정 요소(인덱스)를 제거하는 메서드.
다음 index부터 index 값이 하나씩 당겨진다.
list.remove(2);
6. add(index, element("값"))
==> ArrayList의 특정 index에 데이터를 추가하는 메서드.
해당 index에 추가가 되고, 기존에 있던 데이터들은 index가 뒤로 하나씩 물러남
list.add(2, "세종대왕");
array list는 10개가 기본이고 10개씩 추가됨
/*
* Iterator 객체
* ==> 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는
* 데이터들을 읽어 오는 방법을 표준화 해 높은 객체
*/
// hasNext() : 읽어올 데이터가 있는 지 확인하는 메서드
// boolean 형으로 반환.
while(it.hasNext()) {
// next() : 데이터를 가져오는 메서드.
System.out.println(it.next());
}
/*
* LinkedList
* - List 인터페이스의 자식 클래스 중 한 종류
* - 특징
* 1) 인접 참조를 링크해서 체인처럼 관리함.
* 2) 특정 인덱스에서 객체를 제거하거나 추가하게 되면
* 앞 뒤의 링크만 연결하면 되는 구조.
* 3) 빈번히 삽입과 삭제가 일어나는 곳에서는 ArrayList보다 더 큰 성능을 발휘함.
* (단, 중간에 삽입과 삭제가 일어나는 경우)
*/
/*
* Stack 클래스(자료구조)
* - 후입선출(LIFO : Last In First Out) 구조임.
*/
Stack<String> stack = new Stack<String>();
// 1. push()
// ==> stack에 저장시키는 메서드.
stack.push("강감찬");
stack.push("세종대왕");
stack.push("김구");
stack.push("윤봉길");
stack.push("홍범도");
/*
* peek()
* ==> stack에 저장된 데이터를 가져오는 메서드
* - stack의 맨 위(마지막)에 입력된 데이터를 가져 오는 메서드.
* - 가져온 후 데이터를 stack에서 제거하지 않음.
*/
System.out.println("stack peek() >>> " + stack.peek());
/*
* pop()
* ==> stack에 저장된 데이터를 가져오는 메서드
* - stack의 맨 위(마지막)에 입력된 데이터를 가져 오는 메서드.
* - 가져온 후 데이터를 stack에서 제거함.
*/
while(!stack.isEmpty()) {
System.out.println("이 름 >>> " + stack.pop());
}
/*
* Queue 자료 구조
* - queue 는 인터페이스여서 자식클래스로 객체를 생성하여 사용함.
* - 대표적인 자식 클래스는 LinkedList 객체임.
* - 특징 : 선입선출(FIFO : First In First Out) 구조임.
*/
Queue<String> queue = new LinkedList<String>(); // 자료구조는 무조건 제네릭이 나옴
// 1. offer()
// ==> queue에 저장하는 메서드
queue.offer("101번");
queue.offer("102번");
queue.offer("103번");
queue.offer("104번");
queue.offer("105번");
/*
* peek()
* ==> queue에 저장된 데이터를 가져오는 메서드
* - queue의 맨 처음에 입력된 데이터를 가져 오는 메서드.
* - 가져온 후 데이터를 queue에서 제거하지 않음.
*/
System.out.println("호출한 번호 >>> " + queue.peek());
/*
* poll()
* ==> queue에 저장된 데이터를 가져오는 메서드
* - queue의 맨 처음에 입력된 데이터를 가져 오는 메서드.
* - 가져온 후 데이터를 queue에서 제거함.
*/
while(!queue.isEmpty()) {
System.out.println("호출한 번호 >>> " + queue.poll());
}
System.out.println("큐의 크기 >>> " + queue.size());
/*
* 2. Set 계열의 컬렉션 프레임워크 특징
* - 자료의 순서가 없음(정렬 기능 없음. - index가 없음)
* - 중복 데이터 허용 불가.
* - Set 인터페이스의 자식 클래스를 이용하여 구현.
* ==> HashSet(O), treeSet(X)
*/
// 1. add("값")
// ==> 데이터를 추가하는 메서드.
set.add(100);
// 2. size()
// ==> 원소의 크기를 알려주는 메서드.
System.out.println("set 컬렉션 크기 >>> " + set.size());
Iterator<Integer> it = set.iterator();
while(it.hasNext()) {
System.out.println("set 데이터 >>> " + it.next());
}
/*
* 3. Map 계열의 컬렉션 프레임워크 특징
* - key, value를 한 쌍으로 해서 데이터를 저장하고, 검색하는 기능을 제공함
* - key는 중복 불가, value는 중복 가능.
* - Map 인터페이스의 자식 클래스로 구현.
* ==> HashoMap(O), HashoTable(O).
* Properties(가끔), TreeMap(X)
*/
// Map 인터페이스의 자식클래스를 이용하여 객체 생성
Map<String, Integer> map = new HashMap<String, Integer>()
// 1. put() // ==> Map에 데이터를 저장하는 메서드
// 이름을 키(key)로 저장, 점수를 값(value)으로 저장.
map.put("홍길동", 95);
// 2. get(key) // ==> map에 저장된 데이터를 가져오는 메서드.
// get(key) 메서드를 호출하면 key에 해당하는 value값을 반환해주는 메서드.
System.out.println("세종대왕 점수 >>> " + map.get("세종대왕") + "점");
// 3. keySet()
// ==> map에 저장된 전체 데이터를 가져오는 메서드. (전체 key만 가져옴)
for(String s : map.keySet()) {
System.out.println(s + "님의 점수 >>> " + map.get(s) + "점"); }
// 검색을 해보자
if(map.containsKey(searchName)) { // 내 검색어가 키에 포함되어잇는가?
System.out.println(searchName + "님의 점수 >>> " + map.get(searchName)+"점");
}else { System.out.println("검색한 위인이 없습니다."); }
'자바 JAVA' 카테고리의 다른 글
23.01.26 (네트워크) (1) | 2023.01.26 |
---|---|
23.01.17 (추상 클래스) (0) | 2023.01.17 |
23.01.16 (상속과 다형성) (0) | 2023.01.16 |
23.01.13 (클래스와 객체) (0) | 2023.01.13 |
23.01.12 (클래스와 객체) (0) | 2023.01.12 |
댓글