My footsteps

Stream Api + 컬렉션 / 3 본문

국비수업/수업정리

Stream Api + 컬렉션 / 3

밀김 2023. 5. 18. 10:44
728x90

 

 

 

 

 

 

 

 

 

 

< 컬렉션 + 제네릭 아침복습 >

 

 

 

- 컬렉션은 제네릭으로 만든다!!

 

 

package study;

import java.util.Date;

public class Post {
	//게시글
	private int view;
	private Date regdate;
	private String name;
	private String id;
	private String content;
	
	
	public Post() {
		
	}
	
	public Post(int view, Date regdate, String name, String id, String content) {
		super();
		this.view = view;
		this.regdate = regdate;
		this.name = name;
		this.id = id;
		this.content = content;
	}

	


	@Override
	public String toString() {
		return "Post [view=" + view + ", regdate=" + regdate + ", name=" + name + ", id=" + id + ", content=" + content
				+ ", getView()=" + getView() + ", getRegdate()=" + getRegdate() + ", getName()=" + getName()
				+ ", getId()=" + getId() + ", getContent()=" + getContent() + ", getClass()=" + getClass()
				+ ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]";
	}

	public int getView() {
		return view;
	}

	public void setView(int view) {
		this.view = view;
	}

	public Date getRegdate() {
		return regdate;
	}

	public void setRegdate(Date regdate) {
		this.regdate = regdate;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}


	
	
}
package study;
import java.util.ArrayList;
import java.util.List;

public class Program {
	public static void main(String[] args) {
		
		List<Post> list = new ArrayList<>();
		
//		list.add(new Post());
		
		//add하면서 post 객체를 생성해줄수도 있다
		Post post = new Post();
		//post 객체 생성해서 접근해주고
		post.setContent("안녕하세요");
		//setter로 원하는 컨텐츠 넣어주고
		list.add(post);
		//컨텐츠가 들어간 post 객체를 list 컬렉션에 푸쉬해줌
		System.out.println(post);
//		System.out.println(list.get(0));
		
	}
}

 

 

 


 

 

 

 

 

 

 

< 스트림 API >

 

 

 

- 인젝션(Injection) : 주입하다 

https://7942yongdae.tistory.com/177

 

Java - 의존성 주입(Dependency Injection)이란?

의존성 주입(Dependency Injection)은 객체의 생성과 사용 관심사를 분리하는 프로그래밍 설계 방식입니다. 자바 같은 경우 추상화 도구(인터페이스, 추상 클래스)를 사용하면 손쉽게 의존성 주입하는

7942yongdae.tistory.com

 

 

 

 

public void load() {
		//Loder 인터페이스 정의 > 인터페이스 파일 만들어라
		//상단에 인젝션이 가능하도록 세터를 추가 > private Loader loader; 하고 인터페이스 파일에 void load();
		loader.load();
	}

 

 

 

	//매니저에 로더를 익명객체로 생성해서 세터에 인젝션 해주세요
		manager.setLoader(new Loader() {
			public int load(Object[] datas) {
			int result = 0;
			  try(FileInputStream fis = new FileInputStream("res/data.csv");
			            Scanner scan = new Scanner(fis);
			            ) {
			         String line = scan.nextLine();
			         String[] tokens = line.split(" ");

			         int size= tokens.length;
			         for(int i =0;i<size;i++) {
			            datas[i]=tokens[i];
			         }
			         result = size;

			      } catch (FileNotFoundException e) {
			         e.printStackTrace();
			      }catch (IOException e) {
			         e.printStackTrace();
			      }
			  return result;
			}
		});
        
        
        -----------------------------------------------
        
        
        public interface Loader {

			int load(Object[] datas);
}

 

 

 

 

 

- 인터페이스는 물려주는게 없기 때문에 다중상속이 가능하다

 

 

 

 

 

부모님한테 빚을 받았다 라고 보면됨. 구현해야할 의무를 saver와 loader에게 부여한것.. 인터페이스에서 '상속'이라는건 좀 애매함

 

 

 

 

 

앞에 public,private 이런거 붙이면 안되고, 대괄호 열어서 안에 뭘 구현해도 안됨. 인터페이스는 공개되지 않는 애고 하나의 약속이라 코드 구현을 해선 안되는것이다. 저 둘을 하게 된다면 추상클래스와 차이가 없어지는것

 

 

 

 

package ex8.inter;

public interface Storage extends Saver,Loader{

	default void print() {
		System.err.println("난 공통이햐");
	}
}

 

- 원래는 인터페이스에서 구현을 하면 안되는데(이러면 추상화클래스랑 다를바가 없어서.) 구현을 할일이 있다면 default를 붙여준다

 

 

 

- static 메서드도 인터페이스 안에서 정의할수 있다(일반함수도 가능)

 

 

- 일반적인 클래스와 다른것은 인터페이스는 멤버변수가 존재할수 없다. 

 

 

- 밑에 코드처럼 static 선언 가능

package ex8.inter;

public interface Storage extends Saver,Loader{
	static int x=0;
	
	default void print() {
		System.err.println("난 공통이햐");
	}
}
package ex8.inter;

public interface Storage extends Saver,Loader{
	static int x=0;
	
	default void print() {
		System.err.println("난 공통이햐");
	}
	
	static int getX() {
		return x;
	}
}
//메인메서드에서 호출가능
//System.out.println(Storage.getX());

 

 

 

- 인터페이스는 클래스가 아니다!!!!!!! 클래스처럼 쓰지 말기!!! 그저 약속을 담는 그릇일 뿐이다

 

 

 


 

 

 

< 컬렉션 >

 

 

- 코드가 글씨체가 눕혀져 있으면 구현이 완료되지 않은 애들임

 

 

 

 

- list 객체 만들어주세요~ 하면 구현체인 arraylist도 만들어야함

 

 

 

 

 

 

 

차이점 알아두기!

 

 

 

 

 

 

 

 

 

 

		List<Integer> list1 = new ArrayList<>();
		list1.add(3);
		list1.add(3);
		list1.add(3);
		list1.add(3);
		System.out.println("list length : "+list1.size());//4
		
		Set<Integer> set = new HashSet<>();
		set.add(3);
		set.add(3);
		set.add(3);
		set.add(3);
		System.out.println("set length : "+set.size());//1
		
		Map<String, Object> notice = new HashMap<>();
		//string:키 object:값
		notice.put("id", 1);
		notice.put("title", "컬렉션 어러벼");
		notice.put("hit", 12);
		System.out.println("map length : "+notice.size());//3
		//map은 일시적으로 사용하는 데이터를 임시저장할때 씀

 

 

 

 

- set는 식별자가 없어서 값을 지정해서 꺼내는게 불가능하다 

 

 

 

 

- list랑 map은 값 꺼내는거 쌉가능한.

		Map<String, Object> notice = new HashMap<>();
		//string:키 object:값
		notice.put("id", 1);
		notice.put("title", "컬렉션 어려버");
		notice.put("hit", 12);
		System.out.println("map length : "+notice.size());//3
		System.out.println("map get : "+notice.get("title"));//컬렉션 어러벼가 나옴

 

 

 

 

- 열거기능 : 일괄적으로 데이터를 꺼내는 기능(에니머레이션,이터레이터)

 

- 이터레이터 : 값을 저장해주진 않고 , 반복적으로 값을 꺼내기 위한 인덱스 객체

 

 

 

Iterator<Integer> listIt = list1.iterator();
//이걸 추가해줌으로써 다음줄을 호출할수 있게 된다

 

 

 

 

 

 

 

 

728x90

'국비수업 > 수업정리' 카테고리의 다른 글

JSP  (0) 2023.05.22
쓰레드  (0) 2023.05.19
인터페이스 / 다형성 / 익명클래스  (0) 2023.05.17
컬렉션 / 2 + 추상화  (0) 2023.05.16
예외 처리 / 컬렉션  (0) 2023.05.15