본문 바로가기
휴먼 IT 교육 수업 메모

[휴먼IT] 수업 7일차 메모 (컬렉션) 250110

by demianpark127 2025. 1. 10.
SMALL

 

package 정적_static;

interface F{
	
}

interface G{
	
}

interface H extends F,G{
	
}

class B{
	static int[] arr = new int[3];
}

class C extends B{
	void method() {
		B.arr[0]=100;
	}
}

class D extends C implements F,G{
	void method() {
		B.arr[0]=200;
	}
}

public class A {
	public static void main(String[] args) {
		B b = new B();
		C c = new C();
		D d = new D();
		
		c.method(); //100
		System.out.println(B.arr[0]);
		d.method(); //200
		System.out.println(B.arr[0]);
	}

}
package pak1_Object;
/*
 	.패키지
 		- 연관된 클래스끼리 패키지화 시켜 계층화 시켜서 관리하기위한 목적이다.
 		- 클래스의 이름은 패키지,클래스이다. >> 다른 패키지에서는 동일한 이름의 클래스를 생성할 수 있다.
 		- 주요 패키지
 			. java.lang : 자바 프로그래밍에서 가장 기본적인 클래스와 인터페이스를 모아놓은 패키지
 							- import가 필요없이 직접 사용가능하다.
 			. java.util : 날짜, 시간, 벡터등 다양한 유틸리트 클래스와 인터페이스를 제공
 			. java.io : 키보드, 모니터, 프린터, 파일등에 입출력하는 클래스와 인터페이스를 제공
 			. java.awt,java.swing : GUI프로그래밍에 필요한 클래스와 인터페이스를 제공
 			. 등
 		. Object
 			- java.lang에 속해있다.
 			- 모든 클래스에 강제로 상속된다
 			- 계층구조상 최상위 클래스 부모이다
 			
 			- 메소드
 				. boolean equals(Object obj) : 생성한 객체가 obj와 같은 객체인지 비교 (2 == 3)
 				  A a = new A()
 				  B b = a;
 				  
 				  if(a.equals(b){}
 				. Class get(Class() : 현재 실행되고 있는 클래스를 리턴
 				. int hashCode()	: 현재 객체 대한 해시코드 값을 리턴
 				. String toString() : 현재 객체에 대한 문자열 표현을 리턴
 				. void notify()
 				. void notifyAll()
 				. void wait()
 			
 */
//import java.lang.Object;

class A extends java.lang.Object{
	java.lang.String name = "A";
}
class B {
	String name = "홍길동";
	
	@Override
	public String toString() {
		return name;
	}
}
class C {
	String name = "C";
}

public class Obj1 {
	public static void main(String[] args) {
		A a = new A();
		System.out.println(a);
		B b = new B();
		System.out.println(b.toString());
		C c = new C();
		
		Object[] obj = new Object[3];
		obj[0]=a;
		obj[1]=b;
		obj[2]=c;
		
		A t = (A)obj[0];
		System.out.println(t.name);
	}
}

 

pak1_Object.A@49e4cb85
홍길동
A

 

package pak1_Object;

class Point2{
	int x,y;
	public Point2(int x, int y) {
		this.x=x; this.y=y;
	}
		
	public boolean equals(Point2 p) {
		if(x==p.x && y==p.y) {
			return true;
		}else {
			
		}
		return true ;
	}
}

public class Obj2_실습 {
	public static void main(String[] args) {
		
		// 여러 객체를 생성해서 객체가 같은 객체인지 비교해 보세요
		Point2 a = new Point2(2, 3); // a ---------> (객체)
		Point2 b = new Point2(2, 3); // b ---------> (객체)
		Point2 c = new Point2(3, 4);
		
		if(a == b) {
			System.out.println("a==b, 같은 객체이다");
		}
		if(a.equals(b)) {
			System.out.println("a와 b의 값이 같습니다");
		}
		if(a.equals(c)) {
			System.out.println("???");
		}
		
	}

}
package Pak2_Wrapper;

/*
 	int ------- Integer
 	char ------ Character
 	float ----- Float
 	double ---- Double
 	byte ------ Byte
 */
public class W1_Integer {
	public static void main(String[] args) {
		//박싱		
		//Integer num1 = new Integer(10);
		Integer num1 = Integer.valueOf(10); // 기본데이터타입 ---> 객체타입 : Boxing - valueOf()
		//언박싱
		int num2 = num1.intValue(); // 객체타입 ---- > 기본데이터타입 : Unboxing - intValue()
		
		//오토박싱
		Integer num3 = 100;
		//오토언박싱
		int num4 = num3;
		
	}
}
package pak3_String;

import java.util.StringTokenizer;

public class StringTokenizer1 {
	public static void main(String[] args) {
		String query = "name=홍길동&&address=서울시 영등포구&&나이=25";
		StringTokenizer st = new StringTokenizer(null);
		
		int n = st.countTokens();
		System.out.println("분리된 토큰수는 "+n+"개");
		
		for(int i=0; i<n; i++) {
			String token = st.nextToken();
			System.out.println(token);
		}
	}

}
package pak4_Math;
/*
 	Math
 		. static타입이다
 		. java.lang.Math
 		. 수학관련 메서드들
 			- static double abs(double a)
 			- static double cos(double a)
 			- static double tan(double a)
 			- static double sin(double a)
 			- static double ceil(double a)
 			- static double floor(double a)
 			- static double round(double a)
 			- static double max(double a, double b)
 			- static double min(double a, double b)
 			
 			- static double random() -랜덤값 			
 */

public class Math1 {
	public static void main(String[] args) {
		
		System.out.println(Math.random());
		System.out.println(Math.random()*10+1);
		System.out.println(Math.random()*100+100);
	}

}
package pak5;

import java.util.Random;

public class Random1 {
	public static void main(String[] args) {
		Random r = new Random();
		int n = r.nextInt(); //~2의31승 ~ 2의31
		System.out.println(n);
		
		int m = r.nextInt(100);
		System.out.println(m); //0~99
	}

}

 

2014061438
97

 

package Calender;

import java.util.Calendar;

public class Canlendar1 {
	public static void main(String[] args) {
		Calendar now = Calendar.getInstance();
		
		String str;
		
		int year = now.get(Calendar.YEAR);
		str = year+"년 ";
		
		int month = now.get(Calendar.MONTH)+1;
		
		str += month+"월 ";		
		
		int day = now.get(Calendar.DAY_OF_MONTH);
		str += day+"일 ";
		
		int hour = now.get(Calendar.HOUR_OF_DAY);
		if(hour>12) {
			hour = hour-12;
			str += "오후 " + hour+"시 ";
		}else {
			str += "오전 " + hour+"시 ";
		}	
		
		int min = now.get(Calendar.MINUTE);
		str += min+"분 ";
				
		int sec = now.get(Calendar.SECOND);
		str += sec+"초 ";
		
		// 요일 - 일 :1 ,월~토 :2~7
		int week = now.get(Calendar.DAY_OF_WEEK);				
		switch(week) {
		case 1: str += "(일요일)"; break;
		case 2: str += "(월요일)"; break;
		case 3: str += "(화요일)"; break;
		case 4: str += "(수요일)"; break;
		case 5: str += "(목요일)"; break;
		case 6: str += "(금요일)"; break;
		case 7: str += "(토요일)"; break;
		}
		
		System.out.println(str);
	}
}

 

2025년 1월 10일 오후 4시 31분 11초 (금요일)

자바 컬렉션(Java Collection)

자바 컬렉션은 데이터의 그룹을 저장하고 관리하기 위한 프레임워크입니다.
배열과 달리 크기가 가변적이며, 다양한 자료구조(리스트, 집합, 맵 등)를 구현할 수 있는 클래스와 인터페이스를 제공합니다.
컬렉션은 데이터를 효율적으로 저장, 검색, 추가, 삭제, 정렬 등의 작업을 수행할 수 있습니다.


컬렉션의 주요 인터페이스

  1. List
    • 순서가 있는 데이터 집합을 표현합니다.
    • 요소의 중복을 허용합니다.
    • 구현 클래스: ArrayList, LinkedList, Vector 등.
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
System.out.println(list); // [Apple, Banana]

Set

  • 중복을 허용하지 않는 데이터 집합을 표현합니다.
  • 순서가 보장되지 않을 수 있습니다.
  • 구현 클래스: HashSet, TreeSet, LinkedHashSet 등.
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Apple");
System.out.println(set); // [Apple]

Map

  • 키(Key)-값(Value) 쌍으로 데이터를 저장합니다.
  • 키는 중복을 허용하지 않지만, 값은 중복이 가능합니다.
  • 구현 클래스: HashMap, TreeMap, LinkedHashMap 등.
  •  
Map<String, String> map = new HashMap<>();
map.put("A", "Apple");
map.put("B", "Banana");
System.out.println(map); // {A=Apple, B=Banana}

Queue

  • FIFO(First-In-First-Out) 구조의 데이터 집합을 표현합니다.
  • 구현 클래스: LinkedList, PriorityQueue 등.
  •  
Queue<String> queue = new LinkedList<>();
queue.add("Apple");
queue.add("Banana");
System.out.println(queue.poll()); // Apple

Deque

  • 양방향으로 삽입 및 삭제가 가능한 데이터 구조.
  • 구현 클래스: ArrayDeque, LinkedList 등.
  •  
Deque<String> deque = new ArrayDeque<>();
deque.addFirst("Apple");
deque.addLast("Banana");
System.out.println(deque); // [Apple, Banana]

컬렉션의 주요 클래스

  1. ArrayList
    • 내부적으로 동적 배열을 사용하여 데이터를 관리.
    • 검색 속도가 빠르며, 크기가 가변적.
  2. LinkedList
    • 내부적으로 연결 리스트를 사용.
    • 삽입 및 삭제가 빠름.
  3. HashSet
    • 해시 기반으로 구현된 집합.
    • 중복 제거와 빠른 검색에 유리.
  4. HashMap
    • 해시 테이블 기반의 키-값 쌍 저장.

제너릭(Generic)

**제너릭(Generic)**은 클래스나 메서드가 사용할 데이터 타입을 미리 지정하지 않고, 나중에 사용할 때 타입을 명확히 지정할 수 있도록 하는 기능입니다.


제너릭의 특징

  1. 타입 안정성(Type Safety):
    • 컴파일 타임에 타입을 확인하여 타입 오류를 방지합니다.
    •  
List<String> list = new ArrayList<>();
list.add("Apple"); // 가능
// list.add(10); // 오류

코드 재사용성:

  • 다양한 타입의 객체를 지원하도록 동일한 코드 구조를 재사용할 수 있습니다.
  •  
class Box<T> {
    private T value;
    public void set(T value) { this.value = value; }
    public T get() { return value; }
}
Box<Integer> intBox = new Box<>();
intBox.set(10);
System.out.println(intBox.get()); // 10

타입 캐스팅 제거:

  • 제너릭을 사용하면 타입 캐스팅이 필요하지 않습니다.
  •  
List<String> list = new ArrayList<>();
list.add("Apple");
String fruit = list.get(0); // 캐스팅 불필요

제너릭 클래스

class GenericClass<T> {
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

public class Main {
    public static void main(String[] args) {
        GenericClass<String> stringBox = new GenericClass<>();
        stringBox.setValue("Hello");
        System.out.println(stringBox.getValue()); // Hello

        GenericClass<Integer> intBox = new GenericClass<>();
        intBox.setValue(123);
        System.out.println(intBox.getValue()); // 123
    }
}

제너릭 메서드

public class Main {
    public static <T> void printArray(T[] array) {
        for (T element : array) {
            System.out.print(element + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        Integer[] intArray = {1, 2, 3, 4};
        String[] strArray = {"A", "B", "C"};
        
        printArray(intArray); // 1 2 3 4
        printArray(strArray); // A B C
    }
}

제너릭과 컬렉션의 결합

제너릭은 컬렉션 클래스와 함께 사용되며, 더 안전하고 편리한 데이터를 관리할 수 있습니다.

List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
// list.add(10); // 컴파일 에러 발생
for (String item : list) {
    System.out.println(item);
}

제너릭 사용 시 유의사항

  1. 기본 타입(primitive type)은 사용 불가 → Integer, Double과 같은 래퍼 클래스 사용.
  2. 런타임 시 타입 정보는 제거(Type Erasure) → 컴파일 시 타입 확인 후 제거됩니다.
  3. 제너릭 배열 생성은 불가 → List<T>[] 대신 List<?>[] 사용.

제너릭과 컬렉션은 코드의 안전성과 재사용성을 높이는 강력한 도구로, 효율적인 데이터 관리와 타입 안정성을 제공합니다.

 

 

 

package generic;

import java.util.ArrayList;

class Stack<T>
{
	int point;
	Object[] stack;
	
	public Stack() {
		point = 0;
		stack = new String [10];
	}
	
	public void push(String item) {
		if(point == 10) {
			return;
		}
		stack[point]=item;
		point++;
	}
	
	//값꺼내기 - pop
	public String pop() {
		if(point == 0) {
			return null;
		}
		point --;
		return (String)stack[point];
	}
}

public class Generic1 {
	public static void main(String[] args) {
		Stack <Integer> st = new Stack();
		st.push("10");
		st.push("20");
		st.push("30");
		//st.push("홍길동");
		//st.push("이순신");
		//st.push("강감찬");
		
		for(int i=0;i<3;i++) {
			System.out.println(st.pop());
		}
		System.out.println("***********");
		Stack <String> st2 = new Stack();
		
		st2.push("홍길동");
		st2.push("이순신");
		st2.push("강감찬");
		
		for(int i=0;i<3;i++) {
			System.out.println(st2.pop());
		}
		
		System.out.println("***************");
		ArrayList<String> arraylist = new ArrayList();
		arraylist.add("월요일");
		arraylist.add("화요일");
		arraylist.add("수요일");
		
		for(String str : arraylist) {
			System.out.println(str);
		}
	}
}
30
20
10
***********
강감찬
이순신
홍길동
***************
월요일
화요일
수요일
LIST