[네이버 클라우드 캠프-DevOps] 20일차

정지안·2023년 7월 4일
0
post-thumbnail

20일차(7/4화)

JS

문서 객체 모델(DOM; Document Object Model)

<개념>

웹 페이지나 XML 문서 등의 문서 구조를 표현하고 조작하기 위한 표준 인터페이스

  • HTML DOM으로 Javascript에 엑세스해서 HTML문서의 모든 요소를 변경할 수 있다.
  • HTML 문서 그 자체의 정보를 모두 가지고 있다.
  • HTML 문서를 구성하고 있는 요소들을 node 라고 한다.
  • 다른의미로, HTML DOM은 HTML 요소들을 가져와서 수정, 추가 또는 삭제하는 표준 방법
  • , ,  등의 구성요소를 갖는다.

<기본 원칙>

  1. 모든 HTML 태그는 요소 노드다.
  2. HTML 태그에서 사용하는 텍스트 내용은 자식 노드인 텍스트 노드이다.
  3. HTML태그에 있는 속성은 자식노드인 속성노드이다.
  4. 주석은 주석노드이다.

<용어정리>

parser = 번역해주는애

window = 실행해서 결과가 나오는곳

DOM요소에 접근하기

  • getElementbyId(”id명”)
  • getElementsByClassName(”클래스명”)
  • getElementsByTagName(”태그명”)
  • querySelector(선택자)
    • .getAttribute()
  • querySelectorAll(선택자 또는 태그)
  • onclick응용예제


JSP

include 디렉티브 태그의 기능과 사용법

include 디렉티브 태그

  • 현재 jsp페이지의 특정 영여겡 외부 파일의 내용을 포함하는 태그
  • 현재 jsp페이지에 포함할 수 있는 외부 파일
    • HTML, JSP, 텍스트 파일
  • include 디렉티브 태그는 JSP 페이지 어디에서든 선언 가능

include 디렉티브 태그의 기능과 사용법

![](https://velog.velcdn.com/images/jja6312/post/9647749f-678a-4991-a699-d375247abca1/image.png)
  • 예시
    <!-- 메인 -->
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Include 연습 2</title>
    <style>
    #container{
    	width: 700px;
    	height: 400px;
    	margin: 0 auto;
    	border: 1px solid #ccc;
    }
    </style>
    </head>
    <body>
    <div id="container">
    <%@ include file="IncludeHeader02.jsp" %>
    <p style="text-align: center; font-size:1.2em; color: blue;">방문해주셔서 감사합니다.</p>
    </div>
    <%@ include file="IncludeFooter02.jsp" %>
    </body>
    </html>
    <!-- IncludeHeader02.jsp -->
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <%!
    int pageCnt = 0;
    void addCnt(){
    	pageCnt++;
    }
    %>
    
    <%addCnt();%>
    
    <p style="text-align:right;">
    사이트 <%=pageCnt %>번째 방문자 입니다.
    </p>
    <!-- IncludeFooter02.jsp -->
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
        
        <div style="text-align: center; font-size: 0.8em; color:gray;">Compyright ⓒ 비트캠프</div>
💡 ‘:’ 콜론은 접두사이다.

JSTL; JavaServer Pages Standard Tag Library

  • <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    • JSP 페이지에서 JSTL Core 라이브러리를 사용하기 위한 태그 라이브러리 선언
    • 이 선언을 통해 JSP 페이지에서 JSTL Core 라이브러리의 태그와 기능을 사용할 수 있게 된다.
  • <c:out value="jstl" />
    • JSP 페이지에서 변수나 표현식의 값을 출력할 때 사용한다.
    • JSTL(JSP Standard Tag Library)의 <c:out> 태그를 사용하는 것을 나타낸다.
    • JSP 코드를 더 간결하고 유지보수하기 쉽도록 도와준다.
<!-- jstl -->
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

액션태그

  1. 서버나 클라이언트에게 어떤 행동을 하도록 명령하는 태그

  2. jsp 페이지에서 페이지와 페이지 사이 제어

  3. 다른 페이지의 실행 결과 내용을 현재페이지에 포함

  4. 자바 빈즈(JavaBeans)등의 다양한 기능 제공

    ⇒데이터를 들고다니는 껍질

👿오늘 배운 것은

  • forward 액션태그
  • include 액션태그
  • param 액션태그

가 있었다.

이전에 배웠던 include 디렉티브태그와 혼동하지 않게 유의가 필요했다.

액션태그는 <jsp: >형태로 시작하고, 닫아주는작업(</xxx~>)이 필요했다.

include 디렉티브태그는 <%@

forward는 해당 jsp페이지 내용을 전부 없애고

액션태그의 종류

액션 태그형식설명
forward<jsp:forward page="xxx.jsp"/>다른 페이지로의 이동과 같은 페이지 흐름을 제어
include<jsp:include page="xxx.jsp"/>외부 페이지의 내용을 포함하거나 페이지를 모듈화
useBeanjsp페이지에 자바빈즈를 설정
setProperty자바빈즈의 프로퍼티 값을 설정
getProperty자바빈즈의 프로퍼티 값을 얻어온다.
param<jsp:forward>,<jsp:include>,<jsp:plugin> 태그에 인자를 추가한다.
plugin웹 브라우저에 자바 애플릿을 실행합니다. 자바 플러그인에 대한 object또는 embed태그를 만드는 브라우저별 코드를 생성한다.
element동적xml요소를 설정
attribute동적으로 정의된 xml요소의 속성을 설정한다.
body동적으로 정의된 xml요소의 몸체를 설정한다.
text

forward액션태그의 기능과 사용법

forward액션태그

  1. 현재 jsp페이지 내에서 다른페이지로 이동하는 태그
  2. jsp컨테이너는 현재 jsp페이지에서 forward 액션 태그를 만나면 그전까지 출력 버퍼에 저장되어 있던 내용을 모두 삭제하고 forward액션 태그에 설정된 페이지로 프로그램의 제어가 이동.
  • page 속성 값
    • 현재페이지에서 이동할 페이지의 외부 파일명
  • 예시 <First.jsp>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Action Tag</title>
    </head>
    <body>
    	<h3>이 파일은 first.jsp입니다.</h3>
    	<jsp:forward page="Second.jsp"/>
    	<!-- forward 다음에 있는 내용 -->
    	<p style="color:red;">===================first.jsp의 페이지입니다.====================</p>
    </body>
    </html>
    <Second.jsp>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Action Tag</title>
    </head>
    <body>
    	<h3>이 파일은 first.jsp입니다.</h3>
    	<jsp:forward page="Second.jsp"/>
    	<!-- forward 다음에 있는 내용 -->
    	<p style="color:red;">===================first.jsp의 페이지입니다.====================</p>
    </body>
    </html>

include액션태그

<jsp:include page="Second.jsp"/>

⇒첫번째 페이지 번역하고, 두번째로 넘어가서 번역하고 다시 돌아옴

  • flush라는것도있다.

    • <jsp:include page="IncludeDate.jsp" flush="true"/>
  • request기본 내장 객체나 param애겻ㄴ태그를 이용하여 파라미터를 전달한다.

  • 화면 레이아웃 일부분을 모듈화할때 주로 사용

  • 동적 페이지에 사용

예시

include 디렉티브태그

<%@ include file=”파일명” %>

⇒ 첫번째 두번째 합쳐서 번역

보내주는역할 ⇒ 파람, 리퀘스트

param액션태그

param 액션 태그는 JSP 페이지에서 다른 페이지로 파라미터를 전달할 때 사용됩니다.

  • <jsp:forward>, <jsp:include> 와 함께 사용된다.

위의 코드에서는 destination.jsp로 페이지 전환을 하면서 idname이라는 파라미터를 함께 전달합니다. <jsp:param> 태그를 사용하여 name 속성에 파라미터 이름을, value 속성에 파라미터 값이 들어가게 됩니다.

따라서 param 액션 태그는 JSP 페이지 간에 데이터를 전달하고자 할 때 유용하게 사용됩니다. 전달된 파라미터는 대상 페이지에서 request.getParameter("파라미터이름")을 통해 가져올 수 있습니다.

자바빈즈 액션태그의 기능과 사용법

자바빈즈

Java 언어에서 재사용 가능한 컴포넌트를 개발하기 위한 규약과 관례

필드를 꺼내서 담는다.

DTO; data transfer object

자바빈즈 - DB간..

DAO;Data Access Object

  • 동적 콘텐츠 개발을 위해 자바 코드를 사용하여 자바 클래스로 로직을 작성하는 방법
  • jsp 페이지에서 화면을 표현하기 위한 계산식이나 자료의 처리를 담당하는 자바코드를 따로 분리하여 작성하는것

DAO와 DTO

DAO; data access object

데이터베이스와의 상호작용을 추상화하고 캡슐화하는 객체 지향적인 방식을 제공하는 디자인 패턴

  • 데이터베이스와의 통신을 처리하기 위한 일련의 메서드를 제공
  • 데이터베이스와의 접근을 추상화하여 클라이언트 코드와 데이터베이스 구현 간의 결합도를 낮춘다.
  • 도메인 모델과 데이터베이스 사이의 매핑(Mapping)을 처리
  • 데이터베이스 연산에 대한 일관된 인터페이스를 제공하며, 중복 코드를 줄이고 유지보수성을 향상

DTO; data transfer object

데이터 전달을 위한 객체

주요 특징 및 목적

  • 데이터 전송
  • 캡슐화
  • 불변성
  • 속성 및 접근자 메서드
  • 도메인 개념의 표현

자바빈즈를 작성할 때 규칙

  • 인수가 없는 기본 생성자(default생성자)가 있어야함.

  • 모든 멤버변수인 프로퍼티는 private 접근지정자로 설정

  • 모든 멤버 변수인 프로퍼티는 getter/setter( ) 메소드가
    존재해야함
    - getter( ) 메소드는 멤버 변수에 저장된 값을 가져올 수 있는 메
    서드
    - setter( ) 메소드는 멤버 변수에 값을 저 장할 수 있는 메서드

    
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Action Tag - Use Bean</title>
    </head>
    <body>
    <!-- String s = new String();
    s의 역할을 하는 것이 id의 person
    
    useBean코드는 아래태그와 같다!!
    Person person = new Person();
     -->
    <jsp:useBean id="person" class="webBoard.dto.Person" scope="request"/>
    <p>아이디 : <%=person.getId() %></p><br>
    <p>이름 : <%=person.getName() %></p>
    <%
    //setter로 변경
    person.setId("20231003");
    person.setName("홍길동");
    %>
    <!-- 출력해봄 -->
    <p>아이디 : <%=person.getId() %></p><br>
    <p>이름 : <%=person.getName() %></p>
    
    </body>
    </html>
    ```
      

      
     

Java

문자 입력 스트림 유형

  • Reader클래스는 문자 스트림을 읽기 위한 추상 클래스

  • 서브클래스가 구현해야하는 추상메서드

    • read()
    • close()

package ex12;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Example05 {

	public static void main(String[] args) {
		FileReader fis = null;
		
		try {
			File file = new File("src\\ex12\\example03.txt");
			if(!file.exists()) {
				file.createNewFile();
			}
			
			fis = new FileReader(file);
			int i=0;
			while((i=fis.read())!=-1) {
				System.out.println((char)i);
			}
			
			System.out.println("\n파일 읽기 성공");
				
		}
		catch(Exception e){
			System.out.println(e.getMessage());
		}
		finally {
			try {
				if( fis!= null) {
					fis.close();	
				}
				
			}
			catch(IOException e) {
				System.out.println(e.getMessage());
			}
		}

	}

}

BuuferedReader 클래스

  • 문자 기반 입력 스트림에서 텍스트를 읽는데 사용된다.

  • readLine()메서드로 데이터를 한 줄씩 읽을 때 사용할 수 있어 성능을 빠르게 한다.

BufferedReader 예시

package ex12;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Example06 {

	public static void main(String[] args) {
		FileReader fis = null;
		BufferedReader br = null;
		try {
			File file = new File("src\\ex12\\example03.txt");
			if(!file.exists()) {
				file.createNewFile();
			}
			fis = new FileReader(file); //데코레이션패턴. 디자인 패턴 중 하나.
			br = new BufferedReader(fis);
			String str;
			while((str=br.readLine())!=null) {
				System.out.println(str);
			}
			System.out.println("\n파일 읽기 성공");
		}
		catch(Exception e) {
			System.out.println(e.getMessage());
		}
		finally {
			if(fis!=null) {
				try {
					fis.close();
				}
				catch(IOException e) {
					System.out.println(e.getMessage());
				}
				
			}
			if(br!=null) {
				try{br.close();
				}
				catch(IOException e) {
					System.out.println(e.getMessage());
				}
			}
		}
	}
}
//파일 - 파일리더 - 버퍼드리더 순서로 싸고있다. 그래서 br은 파일기능,파일리더기능,버퍼드리더기능을 다 가질 수 있는거다.

컬렉션 프레임웍(collections framework)

  • 많은 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합
  • 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 인터페이스

관계도

클래스들을 표준화한 프로그래밍방식

  • 컬렉션
    • 여러 객체를 모아놓은 것.
  • 프레임웍
    • 표준화,정형화된 체계적인 프로그래밍 방식
  • 컬렉션 프레임웍
    • 컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식
    • 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공
    • java.util패키지에 포함
  • 컬렉션 클래스
    • 다수의 데이터를 저장할 수 있는 클래스

컬렉션 프레임웍의 핵심 인터페이스

List - 순서O, 중복O

  • 순서가 있는 데이터의 집합. 데이터의 중복을 허용한다.
    • ex_)대기자 명단
    • ArrayList, LinkedList, Stack, Vector

Set - 순서 X, 중복 X

  • 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않는다.
    • ex_)양의 정수 집합, 소수의 집합
    • 구현클래스 : HashSet,TreeSet등

Map - 순서X, 중복 (키X, 값O)

  • 키와 값의 쌍으로 이루어진 데이터의 집합
  • 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용
    • ex_)우편번호,지역번호(전화번호)
    • 구현클래스 : HashMap, TreeMap, Hashtable, Properties

Queue

  • Deque
  • ArrayDeque
  • PriorityQueue

Collection 인터페이스의 메서드

추가 검색 삭제가 있다.

List 인터페이스 - 순서O, 중복O

  1. Vector
    1. Stack
  2. ArrayList
  3. LinkedList

추가 삭제 검색 정렬X

Set인터페이스 - 순서 X, 중복 X

  • HashSet
  • SortedSet
    • TreeSet

합집합,교집합구할 때 좋다.

Map인터페이스 - 순서X, 중복 (키X, 값O)


해쉬맵 동기화 되어있음.

해쉬테이블 동기화 안되어있음

ArrayList

  • Java에서 제공하는 동적 배열 자료구조!
  • 기본 배열과는 달리 크기를 동적으로 조절할 수 있다.
  • 배열의 크기를 초과하여 요소를 추가할 수 있다.

장점

  • 크기 조절
    • ArrayList는 요소의 개수에 따라 크기가 자동으로 조절됩니다. 요소를 추가하거나 삭제할 때 자동으로 크기가 조절되므로, 크기를 직접 관리할 필요가 없습니다.
  • 삽입과 삭제의 효울성
    • ArrayList는 내부적으로 배열을 사용하여 요소를 저장하기 때문에, 요소의 삽입과 삭제가 효율적으로 이루어집니다. 배열의 특정 위치에 요소를 삽입하거나 삭제할 때, 배열의 재배치가 필요한 경우에도 내부적으로 처리해줍니다.
  • 다양한 기능과 메서드
    • ArrayList는 다양한 기능과 메서드를 제공하여 요소의 추가, 삭제, 검색, 정렬 등을 쉽게 처리할 수 있습니다. 예를 들어, add(), remove(), get(), size() 등의 메서드를 활용하여 요소를 다룰 수 있습니다.
  • 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일
  • ArrayList와 달리 Vector는 자체적으로 동기화 처리가 되어 있다.
  • List인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.
  • 데이터의 저장공간으로 배열을 사용한다.(배열기반)

ArrayList의 메서드

  • ArrayList() :기본생성자
  • ArrayList(Collection c) :생성자
  • ArrayList(int initialCapacity) :배열의 길이지정
메서드설명
add추가
indexOf검색. 객체를 찾는것
remove삭제
set
get()일반배열에선 [ n ]으로 요소를 봤는데, 여기선 get( n ) 이구나.

toArray : ArrayList의 객체 배열을 반환

isEmpty :비어있는지 확인

trimToSize : 빈공간 제거

int size : 저장된 객체의 갯수 반환

배열 클래스의 소스를 보고 싶을 땐?

LinkedList

장점 : 구조가 간단하고 데이터를 읽는데 걸리는 시간이 짧다.

단점: 크기를 변경할 수 없다.

  • 크기를 변경해야하는 경우 새로운 배열을 생성 후 데이터를 복사해야함.
    • 크기를 변경해야 하는 경우 새로운 배열을 생성 후 데이터를 복사해야함.
    • 크기 변경을 피하기 위해 충분히 큰 배열을 생성하면, 메모리가 낭비됨.
  • 비순차적 데이터의 추가, 삭제에 시간이 많이 걸린다.
    • 데이터를 추가하거나 삭제하기 위해 다른 데이터를 옮겨야 함.
    • 그러나 순차적인 데이터 추가(끝에 추가)와 삭제(끝부터 삭제)는 빠르다.

특징

  • 변경에 유리
  • 배열의 단점을 보완했음.

⇒ 배열과 달리, 불연속적으로 존재하는 데이터를 연결

  • 데이터의 삭제 : 단 한번의 참조변경만으로능

  • 링크드리스트
    - 연결리스트.
    - 데이터 접근성이 나쁨


  • 더블리 링크드 리스트
    - 접근성 향상
    - 앞뒤로 이동이 가능.


  • 더블리 써큘러 링크드 리스트(doubly circular linked list)

    • 이중 원형 연결리스트

      정리( ArrayList vs LinkedList )

스택과 큐(Stack & Queue)

  • 스택(Stack)

    • LIFO(Last In First Out) 구조

    • 마지막에 저장된 것을 제일 먼저 꺼내게 된다.

    • push()

    • pop()

    • isEmpty()

      스택의 메서드

  • 큐(Queue)

    • FIFO(First In First Out)구조.
    • 제일 먼저 저장한 것을 제일 먼저 꺼내게 된다.

큐의 메서드

배열의 특징

데이터가 연속적인 메모리 공간에 저장되기 때문에, 추가,삭제시 데이터 index가 빈공간이 없게 이동함. 따라서 스택은 배열로 만드는 것이 유리함.

스택 ⇒ 배열로 만드는 것이 유리하다.

왜냐하면, 스택은 LIFO(후입선출)구조이기때문에

배열에서 추가 삭제를 수행할 때 데이터의 이동이 필요 없다.

반면에 큐는 링크드리스트가 유리하다.

큐는 FIFO (선입선출) 구조이다.

따라서 첫 번째로 추가된 데이터가 첫 번째로 제거될 수 있다.

하지만 배열은 크기가 정해져있고, 첫번째 데이터가 삭제된다면 불필요한 데이터의 이동이 생긴다.

따라서 링크드리스트( 기차와같은 줄줄이소세지구조 )를 사용한다면, 첫 번째 데이터를 제거하더라도 불필요한 데이터이동이 필요하지 않을 것이다.

스택과 큐의 활용

스택 활용 예

  • 수식계산, 수식괄호 검사, 워드프로세서의 undo/redo 웹브라우저의 뒤로/앞으로

큐의 활용 예

  • 최근 사용문서, 인쇄작업 대기목록, 버퍼

Iterator, ListIterator, Enumeration(Iterator의 구버전)

  • 컬렉션에 저장된 데이터를 접근하는데 사용되는 인터페이스
  • Enumeration은 Iterator의 구버전

Iterator 메서드

구조가 어떻든간에 컬렉션에 저장된 요소를 읽어오는 방법을 표준화 한것임.

  • 이터레이터 예시

Map과 Iterator

  • Map에는 iterator()가 없다.
    • 맵에 저장된 요소를 가져오려면?
    • keySet(), entrySet(), values()를 호출해야한다.

위 그림은 빨간 박스의 두 줄을, 아래 한 줄의 코드로 바꿔놓은 것이다.

Arrays클래스

  • 배열을 다루기 편한 메서드 제공.(static)
  • toString()
    • 배열의 출력
  • copyOf, copyOfRange()
    • 배열의 복사
  • fill(), setAll()
    • 배열 채우기
  • sort()
    • 배열의 정렬
  • binarySearch()
    • 배열의 검색
  • deepToString()
    • 다차원배열 출력
  • deepEquals()
    • 다차원 배열의 비교
  • asList(Object…. a)
    • 배열을 List로 변환

comparator 와 comparable

  • 객체 정렬에 필요한 메서드를 정의한 이터페이스
  • Comparable
    • 기본 정렬기준을 구현하는데 사용
    • compareTo(주어진 객체를 자신과 비교)
  • Comparator
    • 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
    • compare (두객체를 비교)

해시함수, 해싱(hashing)과 해시코드(hashcode)

해시의 특징

  • 동일한 입력 값에 대해서는 항상 동일한 출력 값이 보장
  • 출력 데이터 값을 가지고 원본 입력 데이터의 값을 알아낼 수 없다.
  • 일반적으로 해시 함수는 그리 복잡하지 않은 알고리즘으로 구현되기 때문에 CPU, 메모리 자원을 크게 소비하지 않는다.
  • 입력 값의 범위보다 출력 값의 범위가 좁기 때문에 다른 입력 데이터에 대해 드물게 동일한 출력 값이 나올 수 있다. (충돌)

충돌 방지와 회피

해시 함수에서 입력값의 범위에 비해 출력값의 범위가 좁기 때문에 각기 다른 입력 데이터에 대해 동일한 출력값이 나오는, 이른바 '충돌'이 발생할 수 있다.

  • 해시를 활용한 자료구조는 해싱을 거쳐 나온 해시코드를 배열의 인덱스로 활용한다고 했는데, 충돌이 발생하면 값을 저장해야할 인덱스 위치가 겹치는 문제가 발생

⇒이를 해결하기 위해 일반적으로 해당 버킷에 데이터가 이미 있다면, 체인처럼 노드를 추가하여 다음 노드를 가리키는 방식(연결리스트)으로 구현

쉽게 말해, 각각의 버킷에 여러 데이터가 저장될 수 있으니, 하나의 버킷 자체도 배열로 구성

HashSet - 순서X , 중복X

중복된 데이터를 제거하거나 이미 데이터가 추가되어 있는지를 검사할 때 주로 사용

set인터페이스를 구현한 클래스

  • HashSet
  • TreeSet

HashSet은?

  • Set인터페이스를 구현한 대표적인 컬렉션 클래스

  • 순서유지하려면, LinkedHashSet클래스를 사용하면 된다.

  • TreeSet

  • 범위 검색과 정렬에 유리한 클래

HashSet 주요메서드

주요메서드기능
HashSet()생성자
HashSet(Collection c)초기용량
HashSet(int initialCapacity)
HashSet(int initialCapacity, float loadFactor)
boolean add(Object to)추가
boolean addAll(Collection c)합집합
boolean remove(Collection c)삭제
boolean removeAll(Collection c)교집합
boolean retainAll(Collection c)조건부삭제
void clear()모두삭제
boolean contains(Object o)포함
boolean containsAll(Collection c)여러객체 모두 포함
Iterator iterator()
boolean isEmpty()비었는지?
int size()저장된 객체 수
Object[] toArray()객체 배열로 반
Object[] toArray(Object[] a)

HashSet

  • 객체를 저장하기 전에 기존에 같은 객체가 있는지 확인

  • 같은 객체가 없으면 저장하고, 있으면 저장하지 않는다.

  • boolean add(Object o)는 저장할 객체의 eqluals()와 hashCode()를 호출

  • TreeSet과 달리 정렬이 필요함.(링크드리스트로 정렬)

  • equals()와 hashCode()가 오버라이딩 되어 있어야 함.

Collections - 컬렉션을 위한 메서드 (static)를 제공

  1. 컬렉션 채우기, 복사, 정렬, 검색

    • fill()
    • copy()
    • sort()
    • binarySearch()
  2. 컬렉션의 동기화

  3. 변경불가(readOnly)컬렉션 만들기 - unmodifiableXXX()

  4. 싱글톤 컬렉션 만들기 - singletonXXX()

  • 객체 1개만 저장하는 컬렉션을 만드는 것.
  1. 한 종류의 객체만 저장하는 컬렉션 만들기 - checkedXXX()

컬렉션 클래스 정리 & 요약

배열기반의 Collection Class

  • ArrayList
    • ( Object 배열을 가지고 있고, 여기에 객체를 저장한다.)
  • Vector
    • ( Object 배열을 가지고 있고, 여기에 객체를 저장한다.)

이것을이용해 만든것이 Stack.

Vector는 Stack을가지고 구현하는 것이 유리하다.

배열의 단점 : 추가 삭제 불리

링크드리스트 : 연결기반

큐는 링크드리스트 기반으로 만든다.

검색기능을 향상시킨건 해시맵.

링크드리스트의장점+배열읮아점 = 해시맵

키값을 쌍으로 저장하는 자료구조.

트리맵

연결기반을 변형한것으로,

최대2개의노드를 연결할수있다는 특징을가지고있다.

검색,범위검색,정렬기능을향상

해시맵과 트리맵의 키부분만으로 만든 것이 해쉬셋과 트리셋

properties는 키밸류를 문자열만으로 저장.

파일의 읽기와 쓰기가 용이하다.

지네릭스(Generices)란?

꺾쇠 안에 넣는 것을 제네릭스라한다.

💡 실수로 string을넣으면 오류가난다. 특정한 데이터 타입만 넣을 수 있음!!
  • 컴파일시 타입을 체크해주는 기능(compile-time type check)

런타임에러를 컴파일에러로 끌고 오는 것.

컴파일한테 타입정보를 더 줘서 형변환에러를줄일수있게하는것.

profile
1% 개발자를 향해:: 개발 공부 일지를 써나갑니다

0개의 댓글