그룹화 스트림 사용 이후에 처리하기 조금 더 편리한 형태 즉, 내가 원하는 자료 구조로 그룹화 시킬 수 있다. groupingBy 전체 직원(Users)에서 직책(Position)별로 나눠서 직원을 그룹화 Map usersByPosition = users.stream() .collect(groupingBy(User::getPosition)); 결과 groupingBy의 파라미터로 온 분류함수를 기준에 의해 Map의 key로가고 객체들은 value로 그룹화되었다. {MANAGER=[tony, alex, oliveia], STAFF=[elsa, mayya, lily, jacob, jace], CEO=[eric] 2. 여러 조건에 의해서 분류 직책별로 우수사원을 뽑기위해 groupingBy의 오버라이드 메소드..
만일 내부 클래스를 이용하는데, 내부 클래스에서 바깥 외부의 인스턴스를 사용할 일이 없다면 static 클래스로 선언해주어야 한다. 왜냐하면 static이 아닌 내부 인스턴스 클래스는 외부와 연결이 되어 있어 '외부 참조'를 갖게되어 메모리를 더 먹고, 느리며, 또한 GC 대상에서 제외되는 여러 문제점을 일으키기 때문이다. 하지만 정적 멤버 클래스는 외부 인스턴스 없이도 만들어질 수 있기 때문에 '외부 참조'가 존재하지 않게 되고, 이로 인해 일회용으로 사용된 바깥 클래스 객체는 더이상 내부 클래스 객체와 아무런 관계가 아니게 되어 정상적으로 GC 수거 대상이 되어 메모리 관리가 잘 된다. 따라서 inner 클래스를 선언할때 static 키워드를 붙여주지 않으면 '외부 참조' 현상 때문에, 내부 클래스 ..
얕은 복사(Shallow Copy) 다양한 복합 멤버 변수를 갖고 있는 객체가 인스턴스가 생성될 때 인스턴스화 되면서 메모리에 할당된 주소의 값을 참조한다. 복사하려는 원본 객체에 대해서 새로운 단일 객체 또는 새로운 복합 객체를 만들고 원본 객체를 참조한다. 따라서 복사된 객체가 원본 객체에 종속적이다. call-by-reference와 유사한 개념이 된다. 깊은 복사(Deep Copy) 새로운 객체가 원본 객체 자체를 copy 하는 것이다. 즉, 원본 객체로부터 독립적인 객체를 생성한다. 즉, call-by-value 와 유사한 개념이 된다. 참조 https://okeybox.tistory.com/147 [Java] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) 얕은 복사(Sha..
얕은 복사: 주소값까지만 복사 let copyObj = { ...obj } let copyArr = [ ...arr, ...secArr ] 깊은 복사: 실제 데이터까지 복사 JSON 데이터 포맷을 사용해서 전혀 새로운 객체 생성 let origin = { name: "user", age: 20, favoriteFood: { first: "sushi", second: "hamburger" } } const copy = JSON.stringify(origin) const deepCopy = JSON.parse(copy)
구조화 되어있는 배열, 객체와 같은 데이터를 destructuring 시켜서 각각의 변수에 담는 것 iterable 한 경우 ( 배열 ) let arr = [ 1, 2 ] let [ one, two ] = arr 객체의 경우 - key를 토대로 let obj = { name: "user", gender: "male" } let { name, gender } = obj let { name: newName, gender: newGender } = obj
어떠한 프로그램에서 제공하는 기능을 사용자가 활용할 수 있도록 만들어 둔 인터페이스 target: 우리가 접근하는 사이트 혹은 프로그램 API 명세서: 사용할 수 있는 기능들이 무엇이 있는지, 혹은 어떻게 사용하는 것인지 적혀있음 request: 해당 사이트, 프로그램에게 어떠한 기능을 사용하겠다 라고 전달하는 행위 client: 요청을 전달하는 사람 API: 요청을 받아 데이터를 제공해주는 서버에게 어떤 요청이 들어왔는지 전달해주는 것. response: client가 받는 데이터
호이스팅 정의 : 함수, 변수의 선언이 마치 위로 끌어올려진 것처럼 동작하는 것을 이야기한다. 동작 이유 : JavaScript가 코드를 해석하고 실행하는 과정과 내부적인 변수의 선언, 할당 과정 때문이다. 동작 과정 JavaScript는 코드를 실행하기 전에 먼저 선언된 변수, 함수 등을 전역 환경에 담아두게 된다. 이후에 정리된 코드를 실행하는 과정을 수행 변수 선언 단계 선언 단계 선언한 변수를 식별자가 담기는 객체에 할당하는 단계 초기화 단계 변수에 할당할 메모리 공간을 부여하는 단계 할당 단계 정의된 변수에 데이터가 할당되는 단계 TDZ ( Temporal Dead Zone ) let 과 const 는 선언 단계와 초기화 단계가 분리되어 실행되고, 그 사이에 TDZ가 존재한다. 따라서 초기화 단..
DOM 이란? Document Object Model 의 줄임말 브라우저가 HTML 문서를 parsing 하는 과정에서 생겨나는 객체 웹 브라우저가 정적인 웹 페이지를 변경하거나 조작하기 위해 HTML 파일을 자바스크립트 객체로 만들어주는 것 DOM은 을 자바스크립트 객체로 만든 것이다. 자바스크립트로 HTML을 수정, 변경하거나 HTML에 작성된 내용을 자바스크립트 변수에 담아서 사용하는 등에 사용된다. 사용방법 document .getElementById("tagID") .InnerText .value .style .TextContent HTML 파일로 가서 ."tagID"라는 id를 가진 태그를 선택해서 .제어한다.