본문 바로가기
728x90

자바10

[자바] 문자열리스트안에 특정 문자열 제거 후 맨 마지막으로 이동시키기 업무를 하던 중 코드를 개선하기 위해 고민을 했던 로직이 있어서 공유차 글을 남깁니다~ 상황 A라는 리스트 안에서 "특정문자" 라는 문자열을 찾는다. 현재 위치에서 가장 마지막으로 위치를 변경하고 싶다. 가장 먼저 직관적으로 떠오로는 코드를 적어보겠습니다. ArrayList list = new ArrayList(Arrays.asList("value1", "value2", "value3")); if (list.contains("value2")) { list.remove("value2"); list.add("value2"); } 위의 코드를 설명드리면 - 리스트를 할당합니다. - value2가 리스트에 있는지 체크합니다 - value2를 제거합니다. - value2를 리스트에 넣습니다. 저의 생각에는 절대 .. 2023. 5. 8.
Map을 활용한 이중 for문 줄이기 업무를 하던 중 이중 for문을 쓰면 해결될 일이 생겼습니다... 하지만 이중 for문을 정말 쓰기 싫었고 개선할 수 있는 무언가 아쉬운 포인트들이 자꾸 눈에 보였습니다... 그래서 for문을 안쓰고 해결할 방법을 찾으려고 노력했고 노력한 끝에 Map을 사용해서 해결해보았습니다. 다만, 메모리나 속도 측면에서 아직 디테일한 체크는 못해봐서 오히려 손해인 로직일 수 있습니다. 이런 방법도 있구나 이렇게 봐주시면 좋을 것 같습니다!! 상황 - A서버에서 B서버에 데이터를 요청합니다. - B서버에서는 데이터의 이름은 모르고 id값만 알고 있습니다. - 따라서, B서버에서 받은 데이터의 id값을 기준으로 A서버에서 데이터의 이름을 넣어줍니다. public void test(Long id){ // 특정 id를 기.. 2023. 3. 22.
자바가상머신 (JVM) JVM이란? - 자바가상머신의 줄임말이다. - 자바 프로그램을 JVM을 통해 실행시킨다. - 가상 머신이라는 프로그램을 실행시키기 위해 물리적으로 유사한 머신을 소프트웨어로 구현한 것이다. JVM을 사용하는 이유 - 크게 두가지로 생각할 수 있다. 1. OS에 상관없이 자바 프로그램을 실행시키기 위해서! - JVM은 자바 프로그램과 OS사이에서 중개자 역할을 하며 자바 프로그램이 OS의 메모리를 사용하는 것을 도와준다. 따라서 window, mac에 관계없이 프로그램을 실행시킬 수 있다. -> 플랫폼의 독립적 2. 편리한 메모리 사용! - JVM은 메모리 관리를 직접해준다. 메모리를 직접 할당하고 해지해야 하던 C프로그램과 다르게 JVM은 메모리를 관리해주는 기능이 있다. JVM 실행 과정 1. 프로그램.. 2021. 8. 13.
자바 8 stream API stream에서 사용할 수 있는 api에 대해서 알아보자!! 1. 걸러내기 - filter - ex)제목에 spring을 포함하는 데이터만 스트림으로 2. 변경하기 - map, flatmap - ex) 리스트의 데이터를 문자열로 리턴 - ex) 특정 클래스의 리스트들의 리스트일 경우 특정 클래스로 리턴 3. 생성하기 - generate, Iterate - 10부터 1씩 증가하는 무제한 숫자 스트임 4. 제한하기 - limit , skip - ex) 위의 만들어진 무제한 스트림에서 앞에 10개를 빼고 10개를 리턴 5. 스트림에 특정조건을 만족하는 데이터가 있는지 확인 - antMatch(), allMatch(), nonMatch() - ex) k로 시작하는 문자열이 있는지? true 또는 false를 리.. 2021. 7. 24.
자바 8 stream 기본 stream 1. 데이터의 저장소 x , 데이터들의 흐름 -쉽게 컨베이어 벨트를 생각하면 좋다!! map -> filter -> collection 2. Funtional in nature : 스트림이 처리한 데이터는 변하지 않는다. // stream을 이용해도 원래 names의 값은 변하지 않는다. public static void main(String[] args) { List names = new ArrayList(); names.add("son"); names.add("kane"); names.add("pogba"); names.add("mata"); Stream name1 = names.stream().map(String::toUpperCase); names.forEach(System.out::.. 2021. 7. 23.
인터페이스 기본 메소드(Default Methods) 인터페이스를 상속받은 클래스 혹은 인터페이스가 있을 때 추상메소드가 있다면 상속받고 재정의를 하게 된다. 그렇다면 새로운 기능을 상속하는 모든 존재들에게 작동되게 하고 싶다면 어떻게 해야할까? 방법은 기본 메소드를 이용하면 된다. default void 메소드명(){ 내부 기능 } 위처럼 메소드를 만들면 상속한 모든 존재들이 기본 메소드를 사용할 수 있게 된다. 코드를 보면서 더 생각해보자 기본 메소드를 갖고 있는 인터페이스 코드 package interface_change.fir; public interface Foo { void printName(); /* * @implSpec * 이 구현체는 getName()으로 가져온 문자열을 대문자로 출력한다. */ default void printNameUpp.. 2021. 7. 16.
728x90