본문 바로가기

Java25

람다식과 스트림 연습 람다식 public class Lambda { public static void main(String[] args) { Caluculate add = (a,b) -> a + b; } } interface Caluculate { int calculate(int a, int b); } 위 람다식을 람다식 없이 풀어쓰게 되면 다음과 같다. Caluculate add= new Caluculate() { @Override public int calculate(int a, int b) { return a + b; } }; 즉 자바에서 람다식은 (매개변수 목록) -> { 람다식 바디 } 와 같은 형태로 작성할 수 있다. 스트림 File[] fileArr = { new File("Ex1.java"), new File(.. 2023. 6. 15.
람다식과 스트림 람다식 메서드를 하나의 식으로 표현한 것, 함수를 간략하면서도 명확하게 표현할 수 있게 해준다. int method (int i) { return (int)(Math.random()*5) + 1; } int[] arr = new int[5]; Arrays.setAll(arr, (i) -> (int)(Ma random() * 5) + 1); 일반적인 메서드와 이를 람다식으로 재구성한 것 모든 메서드는 클래스에 포함되어야 하므로 클래스도 새로 만들어야하고 객체도 생성해야지만 메서드를 호출할 수 있다. 그러나 람다식은 이 모든 과정없이 오직 람다식 자체만으로도 메서드의 역할을 대신할 수 있다. 람다식을 작성하기 위해서는 메서드에서 이름과 반환타입을 제거하고 매개변수 선언부와 블럭 사이에 ->를 추가하면 된다... 2023. 6. 15.
쓰레드 연습 본인은 온라인 게임에 대해 그다지 큰 흥미를 느끼지 않는다. 그나마 축구를 좋아해서 피파 온라인을 몇 번 플레이 하긴 했다. 과거부터 현재까지 내가 가장 인상깊게 본 온라인 게임들을 고르자면 아무래도 스타크래프, 피파, 롤이라고 할 수 있겠다. new Thread(new User(computer, "Starcraft"), "User1").start(); new Thread(new User(computer, "FIFA"), "User2").start(); new Thread(new User(computer, "LOL"), "User3").start(); 오늘은 이 게임들을 플레이하는 가상의 User 들을 사용해 쓰레드의 개념을 연습해보자. 필요한 클래스는 세 개다. 유저, 기업(게임을 제공하는), 그리고 .. 2023. 6. 6.
쓰레드 2 쓰레드의 동기화 멀티쓰레드의 프로세스 경우, 여러 쓰레드가 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 주게 됨, 이는 제어권이 넘어간 쓰레드가 제어권을 다시 가지고 실행되었을 때 의도했던 것과 다른 결과를 얻을 수 있는 가능성이 존재 이를 방지하기 위해 한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 하는 것이 동기화 동기화를 위해서 도입된 개념, 임계영역과 lock(잠금) 공유 데이터를 사용하는 코드 영역을 임계 영역으로 지정 공유 데이터(객체)가 가지고 있는 lock을 획득한 단 하나의 쓰레드만 이 임계 영역내의 코드룰 수행 해당 쓰레드가 영역 내의 모든 코드를 수행하고 나서 lock을 반납 반납된 lock을 대기하던 쓰레드가 획득하여 임계 .. 2023. 6. 6.
쓰레드 1 프로세스 간단하게 말하자면 실행중인 프로그램 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)를 할당받아 프로세스가 됨 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원, 쓰레드로 구성 쓰레드 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것 싱글쓰레드 - 자원 + 쓰레드 멀티쓰레드 - 자원 + 쓰레드 + 쓰레드 ... // 둘 이상의 쓰레드를 가짐 장점 - CPU의 사용률을 향상, 자원을 보다 효율적으로 사용, 사용자에 대한 응답성이 향상, 작업이 분리되어 코드가 간결 단점 - 동기화,교착상태와 같은 문제들을 고려해서 프로그래밍을 해야함쓰레드를 구현하는 방법 Thread 클래스를 상속 class 클래스명 extends Thread { public void run() { } //Thr.. 2023. 6. 5.
열거형 연습 enum Name {Ramsdale, Saliba, Xhaka, Saka} enum Position {Goalkeeper, Defender, Midfielder, Foward} 오늘 특별히 사용될 아스날 선수들 상수로 사용될 예정이라 enum을 사용했다. public class Enum { public static void main(String[] args) { Position[] pArr = Position.values(); for(Position p : pArr) System.out.printf("%s=%d%n",p.name(),p.ordinal()); } } 열거형 상수들에게 할당된 순서를 열거형 상수들의 이름과 함께 프린트를 시도. 참고로 values( )는 컴파일러가 모든 열거형에 자동적으로 추.. 2023. 5. 30.
제네릭스 연습 2 타입 매개 변수 T 의 종류를 제한하여 각 타입에 맞게 여러 개의 지네릭 클래스를 생성할 수 있는데, 하나의 타입 매개 변수 T로 다른 지네릭 타입이 지정된 객체를 다룰 수는 없을까? 와일드 카드는 이를 가능하게 만들어준다, 다형성이 적용된 방법. - T와 그 자식 클래스들만 가능 - T와 그 부모 클래스들만 가능 - 모든 타입이 가능 import java.util.*; class Generics2 { public static void main(String[] args) { playerList 2023. 5. 30.
제네릭스 연습 1 import java.util.*; public class Generics { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("String") // 에러! } } ArrayList 지네릭 클래스가 Integer로 타입이 설정되어 있으므로 다른 타입이 들어올 수 없다 import java.util.*; public class Generics { public static void main(String[] args) { ArrayList list = new ArrayList(); // 에러! } } class Product{} class Tv extends Product{} class Audio extend.. 2023. 5. 29.
지네릭스, 열거형 지네릭스 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어듬 Ex) class Box Box - 지네릭 클래스 T - 타입 변수 또는 타입 매개변수 Box - 원시 타입 지네릭 클래스의 객체를 생성할 때 참조변수에 지정해준 지네릭 타입과 생성자에 지정해준 지네틱 타입은 일치해야함. 서로 상속관계에 있는 자식, 부모 클래스여도 불가능함 그러나 지네릭 타입이 아닌 클래스의 타입 간에 다형성을 적용하는 것은 가능, 이 경우도 지네릭 타입은 일치해야함 또한 지네릭 타입이 부모 클래스인 지네릭 클래스를 생성하고 이 지네릭 클래스에 지네릭 타입의 자식 클래스의 객체를 저장하는 것은 가능, 대신 지네릭 클래스의 저장된 객.. 2023. 5. 29.
컬렉션 프레임워크 연습 import java.util.*; public class CF1 { public static void main(String[] args) { Stack st = new Stack(); Queue q = new LinkedList(); st.push(0); st.push(1); st.push(2); q.offer(0); q.offer(1); q.offer(2); while (!st.empty()) { System.out.println(st.pop()); } while (!q.isEmpty()) { System.out.println(q.poll()); } } } import java.util.LinkedList; import java.util.ListIterator; import java.util.Queu.. 2023. 5. 26.