이 영역을 누르면 첫 페이지로 이동
포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

페이지 맨 위로 올라가기

포렌식 & 개발 이야기 - Forensics & Development

Pental - Forensics / iOS / Windows / Android / Kakaotalk / Telegram / Etc

[명품 Java Programming] 7장 제네릭과 컬렉션

  • 2022.06.17 14:33
  • Programming
글 작성자: pental

명품 자바 프로그래밍 7장 제네릭과 컬렉션

컬렉션 (Collection)은 안드로이드를 비롯한 자바 프로그램을 작성하는데 빼놓을수 없는 중요한 도구이다.

컬렉션은 대체로 다음과 같이 설명 할 수 있다.

  • Element 객체들의 저장소
  • 고정 크기의 배열을 다루는 어려움 해소
  • 다양한 객체들의 삽입, 삭제, 검색 등의 관리 용이

배열의 경우 여러 개의 데이터를 다루는 데 편리한 자료 구조이지만, 삽입 삭제가 빈번하게 일어나며, 데이터의 크기를 예측 할 수 없는 응용프로그램에서 사용하기에는 불편하다.

배열 )

  • 고정 크기 이상의 객체를 관리할 수 없다.
  • 배열의 중간에 객체가 삭제되면 응용프로그램에서 자리를 옮겨야 한다.

컬렉션 )

  • 가변 크기로서 객체의 개수를 염려할 필요 없다.
  • 컬렉션 내의 한 객체가 삭제되면 컬렉션이 자동으로 자리를 옮겨준다.

컬렉션은 제네릭(Generics)이라는 기법으로 구현되어 있으며 컬렉션의 경우 배열이 가진 고정 크기의 단점을 극복하기 위해서 객체들을 쉽게 삽입, 삭제, 검색할 수 있는 가변 크기의 컨테이너로 구성되어있다.


정리하자면,

  • 컬렉션은 제네릭 기법으로 구현됨
  • 컬렉션의 요소는 객체만 가능하다.
    • 기본적으로 int, char, double 등의 기본 타입은 사용 불가능하다.
  • 제네릭
    • 특정 타입만 다루지 않고, 여러 종류의 타입으로 변신할 수 있도록 클래스나 메소드를 일반화 시키는 기법
      • <E>, <K>, <V> : 타입 매개 변수, 즉 요소 타입을 일반화 한 타입
    • 제네릭 클래스 예시
      • 제네릭 스택 : Stack <E>
        • E에 특정 타입으로 구체화
        • 정수만 다루는 스택 Stack <Integer>
        • 문자열만 다루는 스택 Stack <String>

제네릭의 기본 개념

JDK 1.5에서 도입되었으며 모든 종류의 데이터 타입을 다룰 수 있도록 일반화된 타입 매개 변수로 클래스나 메소드를 작성하는 기법이다.


Vector <E>

  • java.util.Vector
    • <E> 에서 E 대신 Element로 사용할 특정 타입으로 구체화
  • 여러 객체들을 삽입, 삭제, 검색하는 컨테이너 클래스
    • 배열의 길이 제한 극복 (고정 크기가 아닌, 가변 크기)
    • 원소의 개수가 넘쳐나면 자동으로 길이 조절
  • Vector에 삽입가능한 것
    • 객체, NULL
    • 기본 타입은 Wrapper 객체로 만들어 저장
  • Vector 객체 삽입
    • 벡터의 맨 뒤에 객체 추가
    • 벡터 중간에 객체 삽입
  • Vector 객체 삭제
    • 임의의 위치에 있는 객체 삭제 가능
    • 객체 삭제 후 자동 자리 이동

Vector <Integer>


벡터의 생성

Vector<Integer> v = new Vector<Integer>(7);

생성한 벡터에 요소 삽입

v.add(5);
v.add(4);
v.add(-1);

벡터의 요소 개수 및 벡터의 용량

int n = v.size(); // 요소의 개수
int c = v.capacity(); // 벡터의 용량

요소 중간 삽입

v.add(2,100)

// Error v.size()인 요소의 개수보다 더 큰곳에 삽입 불가능
v.add(5,100)

요소 얻어내기

Integer object = v.get(1);
int i = object.intValue();

요소 삭제

v.remove(1);

//// Error 인덱스 4에 요소 객체가 없으므로 오류가 발생
v.remove(4);

마지막 요소

int last = v.lastElement();

모든 요소 삭제

v.removeAllElements();


정수만 다루는 Vector<Integer> 컬렉션 활용

  • 정수만 다루는 벡터를 생성하고, 활용하는 기본 사례를 보인다.
import java.util.Vector;

public class VectorEx{
	public static void main(String[] args){
    	Vector<Integer> v = new Vector<Integer> 0;
        
        v.add(5);
        v.add(4);
        v.add(-1);
        v.add(2,100);
        
        System.out.println("Count of Elements in Vector : " + v.size());
        System.out.println("Current Vector Capacity : " + v.capacity());
        
        for(int i = 0; i < v.size(); i++){
        	int n v.get(i);
            System.out.println(n);
        }
        
        int sum = 0;
        for(int i = 0; i < v.size(); i++){
        	int n = v.elementAt(i);
            sum += n;
        }
        
		System.out.println("Sum of Vector Elements : " + sum);
    }
}

Point 클래스만 다루는 Vector<Point> 컬렉션 활용

  • 점 (x, y)를 표현하는 Point 클래스를 만들고, Point의 객체만 다루는 벡터를 작성하라.
import java.util.Vector;

class Point{
	private int x, y;
    public Point(int x, int y){
	    this.x = x;
	    this.y = y;
    }
    
    public String toString(){
    	return "(" + x + "," + y + ")";
    }
}

public class PointVectorEx{
	public static void main(String[] args){
    	Vector<Point> v = new Vector<Point>();
        
        v.add(new Point(2,3);
        v.add(new Point(-50, 20);
        v.add(new Point(30, -8);
        
        v.remove(1);
        
        for(int i = 0; i < v.size(); i++){
        	Point p = v.get(i);
            System.out.println(p);
        }
    }
}

 

저작자표시 비영리 (새창열림)

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

다른 글 더 둘러보기

정보

포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

  • 포렌식 & 개발 이야기 - Forensics & Development의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

카테고리

  • Category (452)
    • Forensics (105)
      • Magnet AXIOM (28)
      • Digital Forensics Informati.. (9)
      • Iphone Forensics (24)
      • DFC (7)
      • 디지털포렌식전문가2급 자격증 (10)
      • FTK ACE 자격증 (7)
    • 이것저것 (7)
      • Ubuntu (6)
      • 디스코드 봇 (4)
      • Volatility GUI (2)
    • CTF (32)
      • NEWSECU (14)
      • CTF-d (5)
      • Puzzel - Network Forensics (2)
      • Security Traps (2)
      • system32.kr (5)
      • HMCTF (4)
    • Programming (260)
      • C (10)
      • Python (11)
      • 백준 (206)
      • 프로그래머스 (32)
    • 그냥 개발 및 잡담 (16)
      • Docker (2)
      • Google Cloud (3)
      • OS 개발 (3)
    • Best of Best (20)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 백준
  • axiom
  • pental
  • 파이썬
  • Forensics
  • 포렌식
  • 프로그래머스
  • 디지털포렌식
  • 전체 보기…

정보

pental의 포렌식 & 개발 이야기 - Forensics & Development

포렌식 & 개발 이야기 - Forensics & Development

pental

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © pental.

티스토리툴바