개발/java
-
Stream.of vs Arrays.stream개발/java 2021. 12. 23. 23:09
배열을 받아서 가공의 편의성을 위해 이를 스트림으로 변환을 한다고 할때 Stream.of 와 Arrays.stream 둘다 사용을 할 수 있습니다. 왜 굳이 자바에서 두개를 만들어서 .. 넣었을까 .. 궁금증이 생겼습니다. 둘은 3가지의 차이점이 있습니다. 1.반환 유형이 다릅니다. int[] temp = {1, 2, 3, 4, 5}; Stream test1_1 = Stream.of(temp); IntStream test1_2 =Arrays.stream(temp); 2. Stream.of는 가공을 한번 더 거쳐야 합니다. Stream.of(temp).forEach(t-> System.out.print(t+",")); //결과값 [I@17f6480, Stream.of(temp).flatMapToInt(Ar..
-
제네릭이 멀까개발/java 2021. 12. 22. 00:56
구체적인 정의는 아래와 같습니다. 제네릭: 클래스 내부에서 사용할 데이터 타입을 외부에서 설정 한 기법으로 메서드나 컬렉션 클래스 컴파일 시 타입체크의 기능을 해주는 역할을 한다. 사용할 타입에는 참조타입만 들어가며 기본타입의 경우 래퍼클래스를 통해서만 사용할 수 있다. 주로 이걸 사용하는 부분을 생각해보시면 ArrayList , List 가 있습니다. ArrayList temp = new ArrayList(); 이렇게 되면 temp에는 String을 제외한 어떤것도 넣을 수 없습니다. temp.add("스트링"); temp.add(1); //컴파일에러 제네릭은 한정적 타입 매개변수를 통해서 범위를 제한할 수 있습니다. 방식에는 두가지 extends 와 super가 있습니다. 1. 해당 참조 타입을 특정..
-
Iterate는 멀까개발/java 2021. 12. 18. 16:16
의미랄 것도 없는데 Iterate는 컨테이너를 순회할 수 있게 해주는 객체입니다. 주로 List를 순회합니다. 근데 그냥 for문이나 foreach 으로 size()로 하면 될것 같은데 왜 쓸까요 ? 1.컬렉션에서 요소를 제어 할 수 있습니다. -> 만약 리스트를 읽으면서 특정 규칙에 의해 해당 행을 제거 하고 싶으면 for문으로 해결할 수 없습니다. 이때 iterator를 remove()를 통해 제거를 할 수 있습니다. 2.next() , previous를 써서 앞뒤로 이동 할 수 있습니다. 3.hashNext()를 사용하여 다음행이 있는지 여부를 미리 알 수 있습니다. 다만 지역변수를 사용하여야 합니다. List temp = new ArrayList(Arrays.asList("1", "2", "3",..
-
메모리와 스택과 힙개발/java 2021. 12. 14. 23:11
개발을 할때 변수는 어디에 저장되고 데이터튼 어디에 쌓이고 갑자기 인텔리제이 빌드는 힙 메모리가 부족하다고 안되고 .. 등 원인에 대해 알지 못하고 그냥 막 사용 하였습니다. 이에 대해 조금 알아보고자 합니다. 메모리란 단기 데이터 스토리지 정보에 빠르게 액세스 할 수 있도록 컴퓨터가 실시간으로 사용하는 정보입니다. 주로 애플리케이션 로딩, 인터넷 브라우징 , 등 일상적인 여러 작업을 수행하는데 사용합니다. 그래서 용량이 큰것이 더 나은 성능을 좌우합니다. 만약 제가 만든 프로그램이 실행이 되면 OS가 JVM에게 메모리를 할당해줍니다. 그리고 할당 받은 메모리는 사용 용도에 따라 영역을 나누어 관리가 됩니다. 이는 크게 코드영역 , 데이터 영역 , 스택 영역 , 힙영역 이렇게 4개로 분리가 됩니다. 코드..
-
Builder 패턴개발/java 2021. 12. 14. 03:39
객체에 여러 값을 주입하는 방법에는 여러방식이 있습니다. 1.생성자 주입 (Constroctor) 2.수정자 주입 (Setter) 1.생성자 주입을 사용할 경우 만약 객체 내 인자가 많아 여러 케이스가 필요 할 경우 해당 케이스별로 생성자를 만들어 줘야 합니다. 또한 인자의 순서가 중요하므로 순서를 바꿀 경우 적용 코드에서 인식을 하지 못합니다. 2.수정자 주입을 사용할 경우 생성 시점전에 빈 생성자를 호출 하고 인자를 주입하는 방식이므로 언제 어디서나 변경이 가능합니다 즉 불변 클래스가 아니게 됩니다. => 그러므로 빌더 패턴이 생겨나게 되었으며 이를 구현 하면 문제점들을 해결할 수 있습니다. 1번의 문제처럼 생성자를 인자 수에 따라 구현하지 않아도 됩니다. 인자의 순서에 영향을 받지 않습니다. 2번의..
-
일급 컬렉션개발/java 2021. 12. 12. 16:34
1)일급 컬렉션이 머지 .. 2)일급 컬렉션을 왜 쓸까 .. 일급컬렉션이란 컬렉션을 래핑하면서 그 외 다른 멤버 변수가 없는 상태로 만드는 것을 일급컬렉션이라 한다. 사용 이유는 책임 분산이다. 예를 들어보자 카페에 음료가 너무 잘 팔려 여러 메뉴 중 음료만 2개 이상 못팔게 제한을 한다고 하고 코딩을 한다고 가정을 하자 1.A카페에서 주문을 할때 음료 수량에 대한 제한을 둔다. 만약 ) 케이크 장사가 너무 잘돼서 인당 판매 수량을 3개로 제한을 한다면 동일하게 각 카페에서 수량 제한을 해야한다. 코드로 하자면 아래와 같다. 판매 상품이 추가 되고 수량제한관련 로직이 추가 될수록 클래스 내 validation이 늘어 날 것이고 그만큼 부담도 증가한다. 그러므로 이 책임을 음료 리스트 , 케이크 리스트 등..
-
enum개발/java 2021. 12. 12. 13:52
enum이란 멀까요, 그리고 왜 사용을 할까요 저는 코드 내에 특정 예외로직을 넣을 경우 하드코딩으로 IF문을 넣어 equals를 사용하여 왔습니다. 또한 개발을 할때 공통적인 코드의 경우 주로 DB 조회를 통해서 많이 사용하여 왔습니다. 그러다 보니 코드 자체가 지저분해지는 것은 물론이고 변경이 어렵고 관리가 어렵다는 것을 알게되었습니다. 주로 아래 두가지의 경우에 enum을 활용하면 코드를 읽기 쉽고 간결하게 작성할 수 있습니다. 1.특정 예외로직을 넣을 경우 하드코딩으로 IF문을 넣어 equals를 사용 어떤 예외가 추가 or 변경될경우 해당 소스를 찾아 추가 혹은 변경을 해줘야합니다. 추가 사항이 많아질수록 코드가 지저분해지며 이는 다른이들로 하여금 코드 해석을 어렵게 만듭니다. 2.공통적인 코드..