목록Java (77)
가자미의 개발이야기
어댑터 패턴 어댑터하면 실생활에서 콘센트 볼트를 호환 해주는 도구를 가르킨다. 어댑터 패턴은 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용할 수 있도록 한다. SOLID 중에서 개방폐쇄 원칙을 따른다(OCP) 서로 비슷한 인터페이스를 구현하지만 서로 동일하지는 않을 때 이를 호환해주는 어댑터 클래스를 활용하는 패턴이다. 활용 예시. 110v를 사용하는 가정에서 220v를 활용하려고 할 때 어댑터를 사용하는 얘시. 110v 인터페이스 package com.company.design.adapter; public interface Electronic110V { void powerOn(); }220v 인터페이스 package com.company.design.adapter; public interfa..
싱글톤 패턴 Singleton Pattern 싱글톤 패턴은 어떤 클래스(객체)가 유일하게 1개만 존재할 때 사용. 서로 자원을 공유 할 때 주로 사용. 현실에서는 프린터를 상상해보면 이해가 된다. 여러 컴퓨터가 한 프린터를 사용하는 경우가 싱글톤 패턴에 해당한다. 기본 생성자는 private로 접근을 막고 get메소드로 간접 접근하도록 구현한다. 사용 예시 한 소켓클라이언트 객체로 두 클래스가 사용하는 예시 소켓클라이언트 클래스 package com.company.design.singleton; public class SocketClient { private static SocketClient socketClient = null; //싱글톤 패턴에서는 자기 자신은 기본적으로 가지고 있어야 함 //기본 생..
기존의 c언어와 같은 절차지향으로 프로그램을 작성하다가 현실에 존재하는 사물을 있는 그대로 모델링하여, 행위와 속성을 정의하고, 절차적이 아닌 객체가 중심이 되어 실제로 사물이 동작하는 방식으로 설계하는 방식. 객체의 3 요소 상태 유지(객체의 상태)-상태정보 저장, 유지, 속성은 변수로 정의 되어있어야함. 또한 변경가능해야함. 기능 제공(객체의 책임)-메소드로 기능을 제공. 외부로부터 직접 속성에 접근해 변경하는게 아니라 객체의 메소드로 변경가능해야함. 고유 식별자 제공(객체의 유일성)-각 객체는 고유한 식별자 있어야함.(디비에서 유니크키 또는 프라이머리키) 물리 객체 : 물리적객체는 실제로 사물이 존재, 이를 클래스로 정의 개념 객체 : 서비스, 비즈니스 로직을 처리하는 부분. 객체 지향의 4대 요소..
숫자형 스트림 reduce 메서드로 스트림 요소의 합을 구하는 사례를 보자 int calories = menu.stream() .map(Dish::getCalories) .reduce(0, Integer::sum); 이런 경우, reduce에 박싱비용이 포함되어 있다. 합계를 계산하기 전에 Integer를 기본형으로 언박싱해야한다. 기본형 특화 스트림 자바에서는 이런 박싱 비용을 피할 수 있도록 세 가지 기본형 특화 스트림을 제공한다. int 특화 IntStream double 특화 DoubleStream long 특화 LongStream 이런 특화 스트림은 오직 박싱 과정에서 일어나는 효율성과 관련 있으며, 스트림에 추가 기능을 제공하지는 않는다. 숫자 스트림으로 매핑 스트림을 특화 스트림으로 변환할 ..
평화로운 토요일 오전... 알바를 하며 자바 공부를 하고 있었다. 내가 쓴 코드를 보자. public class Ch1 { //using predicate! public static List filterPlayer(List list, playerPredicate p) { List result = new ArrayList(); for (Player i : list) { if (p.test(i)) { list.add(i); } } return result; } public static void printPlayer(List list){ for(Player i : list){ System.out.println(i); } } public static void main(String[] args){ List lis..
a. 필터링 스트림 요소를 선택하는 방법을 필터링이라고 한다. 프레디케이트 필터링과 고유 요소만 필터링하는 방법에 대해 알아보자! 프레디케이트로 필터링하기 프레디케이트를 인수로 받아 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환하는 방식을 말한다. 대표적으로 filter method가 있다. 예시로 보자! List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) .collect(toList());고유 요소 필터링 고유 요소로 이뤄진 스트림을 반환하는 distinct method를 지원한다. 여기서 고유 요소라는 말은 중복된 요소가 없는 요소를 의미한다. 중복된 요소를 검증은 hashCode, equals로 결정된다. List numbe..
a. 스트림이 뭘까? 스트림은 자바 8 API에 새로 추가된 기능이다. 스트림을 이용하면 선언형(데이터를 처리하는 임시 구현 코드 대신 질의로 표현이 가능)으로 컬렉션 데이터를 처리할 수 있다. 쉽게 말하면, 스트림은 데이터 컬렉션 반복을 멋지게 처리하는 기능이라고 생각하자. 또한 스트림을 사용하면 멀티스레드 코드를 쓰지 않고도 투명하게 데이터를 병럴로 처리할 수 있다.(추후 알아보자) 일단 코드로 이해해보자 먼저 요리 중 저칼로리 요리명을 반환하고, 칼로리 기준으로 요리를 정렬하는 자바 7 코드를 보자. //요소 필터링 List lowCaloricDishes = new ArrayList(); for (Dish dish : menu) { if(dish.getCalories() < 400) { lowCal..
a. 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다! 익명 : 람다 표현식에는 이름이 없다. 함수 : 람다는 메서드와 달리 특정 클래스에 종속되지 않으므로 함수라 부른다. 전달 : 메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성 : 익명 클래스보다 간결하다. 커스텀 Comparator 객체 구현 예시로 람다의 힘을 느껴보지! Comparator byWeight = new Comparator { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } } //Ramda Comparator byWeight = (Apple a1, Apple a2) -> a..
'녹색 사과를 모두 찾고 싶어요... 아니다! 150그람 이상인 사과를 모두 찾고 싶어요.... 생각해보니 150그람 이상이면서 녹색인 사과를 모두 찾아야 될 것 같네요..' 이렇게 시시각각 변화는 사용자의 요구 사항을 최소 비용으로 대응하기 위해서는 어떻게 해야할까? a. 동적 파라미터화란… 동적 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 말한다. 나중에 실행될 메서드의 인수로 코드 블록을 전달할 수 있다. b. 변화하는 요구사항에 대응하기 맨 처음 사과 요구사항을 자꾸 바꿔서 요청하는 예시를 해결해보자! b-1. 첫번째 시도. 녹색 사과 필터링 enum Color{RED, GREEN} public static List filterGreenApple(List inventory)..
Comparable : 기본 정렬기준을 구현하는데 사용 Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용 public interface Comparator { int compare(Object o1, Object o2); //o1과 o2를 비교 boolean equals(Object obj); } public interface Comparable { int compareTo(Object o); //객체 자신(this)와 o를 비교 } Comparable을 구현한 클래스는 정렬이 가능하다. Comparable은 어떤 클래스의 인스턴스들이 서로 비교 가능함을 의미 Comparator는 임의의 오브젝트들의 비교 기준을 구현.