본문 바로가기
자바 JAVA

23.01.18 (기본 클래스)

by 2023코딩시작 2023. 1. 18.

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

댓글