language/java 25

14. 람다와 스트림

1. 람다식 1.1. 람다식 사용 조건 Java 8 이상 버전 함수형 인터페이스(Functional Interface) 일 때 사용 가능 이름이 거창할 뿐이지 익명 클래스 중 아래의 조건일 때 람다식으로 변경이 가능하는 뜻 함수형 인터페이스: 하나의 추상 메서드만을 가지고 있는 인터페이스 default 메서드는 제외 Object 메서드 제외 @functionalInterface : 애노테이션을 이용해서 조건에 부합한 인터페이스인지 체크 가능 익명클래스 함수형 인터페이스 ⊂ 익명클래스 익명클래스 : 인터페이스, class 상관 없이 기준이 되는 class나 interface 를 가지고 익명 객체를 생성할 수 있다. 물론 부모의 method의 개수도 제약이 없다. 함수형 인터페이스 : lambda 식을 위한..

language/java 2023.09.08

원카드 만들기 - v2.설계도

1. 원카드 설계도 v2 v1 : hardCoding을 통해 원카드를 작성했기 때문에 설계도 조차 없다. v2 : v1에서 수정할 부분과 전반적인 상황이 눈에 들어오기 때문에 작을 클래스로부터 TDD를 수행하면서 키워나갔다. v2 자가피드백 재료에 속하는 class는 금방 만들어 냈지만 이 class들을 조합하는 과정인 Dealer, CardGame class는 아직 미숙하다. oneCard라는 게임이 복잡해서 더욱더 분리해서 메서드를 작성하기가 힘들었다. 그리고 CardGame에서보면 code가 메서드 명만 봤을때는 몇개 없지만 method 구현부자체가 너무 복잡하고 중복되는 부분들이 보였다. 그리고 class를 상속하는 class가 어떤식으로 연결될지 생각하면서 code를 짰지만 뭔가 찝찝한 부분들이..

language/java 2023.04.07

13. 쓰레드

1. 프로세스와 쓰레드 용어 프로그램이 실행되면 프로세스가 된다. program pro:진행되는 , gram: 정보 저장되는 파일 형태 저장 공간만 존재하면 된다 - HDD, SDD process cess==go 작업이 실행되는 것 명령어가 필요한 것 -CPU 프로그램을 더블 클릭 후 수행이 되는 상태로 변하면 프로세스가 된다. * 동영상같은 것은 데이터만 있기 때문에 프로그램이지만 프로세스가 아니다. process - 쓰레드 프로세스 : 작업에 필요한 데이터와 메모리 등의 자원 쓰레드로 구성되어 있는 것 쓰레드: 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것 싱글쓰레드 : 자원 하나에 쓰레드 한 개 멀티쓰레드 : 자원 하나에 쓰레드 여러 개 -> 자원을 공유하기 때문에 동기화 문제가 생긴다. 2..

language/java 2023.04.07

Class 객체 - Reflection API

Class 객체 java.lang.Class 클래스는 모든 클래스의 메타 정보를 나타내는 클래스 클래스의 모든 정보 제공 : 생성자, 필드, 메서드, 접근 제어자,어노테이션 등등 클래스 당 1개만 존재 Class 객체 자체 메서드 존재 원리 Car class를 작성한 Car.java 파일이 존재 프로그램에서 참조변수로 해당 Car type을 부름 Car.java -> compile -> Car.class : 컴파일 완료 컴파일 된 .class 파일은 한 파일(xxx.java) 내에 여러 class 클래스명{}들이 존재하더라도 compile시 각각의 파일(.class)로 나누어준다. 그래서 Class 객체가 클래스당 1개만 존재가 가능 ClassLoader라는 것을 통해서 (위의 과정과 같이 클래스 정보..

language/java 2023.03.28

Object clone() - 얕은 복사, 깊은 복사

clone() _ 얕은 복사, 깊은 복사 clone() 인스턴스변수의 값만 복사하기 때문에 참조타입의 인스턴스 변수가 있는 클래스는 완전한 인스턴스 복제가 일어나지 않는다. 참조타입의 인스턴스 변수: 객체에 iv들이 존재하는데 iv 값이 다른 객체 주소를 가리키는 상황. 완전한 복제가 안된다는 의미: 객체까지는 복사가 됬는데 객체 내부의 iv가 가리기는 다른 객체는 서로 공유하는 상황 이와 같은 clone을 얕은 복사라고 한다. -> 서로 공유하는 객체가 존재하기 때문 clone() 사용 방법 clone의 얕은 복사로 인해 원본 객체에 영향을 끼치기 때문에 원본 보호 목적으로 특정 조건을 허용해야 clone()을 사용할 수 있도록 했다. implements Cloneable : interface 구현 접..

language/java 2023.03.28

List 구현

개요 LinkedList원리 Node를 통해서 객체들을 연결을 한 상태로 Node 내부에 data와 nextNode 주소, prevNode 주소 등이 들어갈 수 있다. 구현된 LinkedList 이용시 중간에 값 추가, 중간 값 삭제 등 배열보다 높은 성능을 보여준다. LinkedList 구현의 필요성 회전하는 순서 같이 LinkedList의 원리로 구현할 수 있는 부분들이 LinkedList에 구현이 되어있지 않다. ex) 1,2,3 이 저장된 list를 get(int index)을 통해서 뽑아낼때 indexrk list Node 수보다 많으면 예외발생 이 외에도 LinkedList를 직접 구현해야되는 상황이 생길시 구현을 할 줄 알아야한다. 구현 순서 LinkedList : 평소에 사용하는 Linke..

language/java 2023.03.27

15. 입출력

1.입출력(I/O)과 스트림(stream) 원리 외부와 자바프로그램간의 data를 주고 받는 과정 필요 data를 주고 받기 위해 외부와 자바프로그램을 연결시켜주는 다리가 필요 : stream stream은 14장의 Stream과 다르다. 연결시켜주는 다리(일방통행) : Input, Output 외부에서 자바로 들어가는 것 하나 : Input 자바에서 외부로 보내는 것 하나 : Output 목적 외부에서 데이터를 받아서 읽기 내부에서 데이터 작성해서 외부로 보내기 input과 output은 따로따로 이다. 연결해서 작동하는 경우가 많은 거지 서로 연결할 필요가 없다. read(), write() input과 output stream의 다른 method들이 분명 더 있겠지만 읽고 쓰기가 기본 원리이다. 외..

language/java 2023.03.26