전체 글 70

자바스크립트 기초부터 모던 자바스크립트까지 - 스코프편

목표 : 자바스크립트에서 스코프가 무엇인지 이해한다. 그냥 javascript라는 언어만 사용하다가, 어느 순간부터 공부를 하려고 하다보면, 언제나 맞닥드리는 부분이 스코프(Scope)다. 게다가 ES6에서 꽤 큰 변화가 있었기에, 그리고 javascipt만의 동작이 어떻게 되는지 알고싶다면 반드시 알아야 할 개념이다. 스코프(Scope)가 뭐지? 이전 포스팅에서 함수의 매개변수의 스코프에 대해 잠깐 다루었다. 매개변수를 참조할 수 있는 유효범위, 즉 매개변수의 스코프는 함수의 몸체 내부로 한정된다. 변수는 자신이 선언된 위치에 의해 자신이 유효한 범위, 즉 다른 코드가 변수 자신을 참조할 수 있는 범위가 결정된다. 정리해 보면, 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위..

자바 기초부터 모던 자바까지 - 람다편

목표 : 람다가 필요한 이유와 자바에서 적용된 내용을 알아본다. 이전 함수형 프로그래밍 포스트에 이어서, 람다에 대해 하나씩 알아가볼 예정이다. 자바에 람다와 함수형 프로그래밍이 왜 필요하지? 아래와 같이 정리해보고자 한다. 이름 없는 함수를 선언할 수 있다. 메서드는 반드시 특정 클래스나 인터페이스 안에 포함되어야 하고 메서드의 이름이 있어야 하지만, 람다 표현식은 이러한 제약에서 벗어난다. 즉, 유연성이 생긴다. 소스 코드의 분량이 획기적으로 줄어들 수 있다. 반복적인 작업이 필요한 기존소스의 비효율성을 낮출 수 있다. 코드를 파라미터로 전달할 수 있다. 외부에서 동작을 정의해서 메서드에 전달할 때 편리하게 사용할 수 있다. 기존의 자바에서 탈피하여 지금 우리가 람다를 공부하는 이유다. 람다 표현식을..

Programming/Java 2022.07.06

[java] House Robber

[참고문제] : https://leetcode.com/problems/house-robber/ House Robber - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 풀이 DP 문제다. 점화식을 찾기 위해서 나열해보자. 이번에도 꽤 많이 나열해보았다. 생각의 흐름 - 초깃값 찾기 이번에도 초깃값부터 찾아보았다. arr[n] 부터 생각해보았으나, 역시 최초 1일때부터 고민하는 것이 나았다. 6번째 정도 적어보니, 이전에 적어둔 식들이 다시 쓰이기 시작했다...

Algorithm 2022.07.05

[java] Climbing Stairs

[참고문제] :https://leetcode.com/problems/climbing-stairs/ Climbing Stairs - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 풀이 DP문제다. DP는 일단 규칙찾기, 점화식 찾기다. 못찾으면 끝나는 문제라고 할 수 있다. 생각의 흐름 - 초기값들을 찾자. 문제에서 보이듯, n = 1, n = 2, n = 3일 때를 보여주고 있다. 점화식 문제처럼 초기값들을 먼저 설정해보자. 생각의 흐름 - 일단 적어보자...

Algorithm 2022.07.05

[java] Flood Fill

[참고문제] :https://leetcode.com/problems/flood-fill/ Flood Fill - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 풀이 어려운 문제는 아니며, 기초를 다지기 위해 풀어보았다. 생각의 흐름 - 보자마자 떠올라야 한다. BFS혹은 DFS 문제임을 알아야 한다. 이차원 배열과 queue, 그리고 적절한 Pair와 같은 자료구조가 필요하다. java에서는 pair와 같은게 없기 때문에, Node라는 class를 만들어 ..

Algorithm 2022.07.04

[java] Longest Substring Without Repeating Characters

[참고문제] : https://leetcode.com/problems/longest-substring-without-repeating-characters/\ Longest Substring Without Repeating Characters - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 풀이 MAP을 써야 하는 문제라는 걸 인식했다. 생각의 흐름 - MAP을 어떻게 구성할까? 인덱스를 갖고 있어야 한다고 생각했다. 똑같은게 나왔을 때, 기존 인덱스를 어..

Algorithm 2022.07.04

자바스크립트 기초부터 모던 자바스크립트까지 - 함수편

목표 : 자바스크립트의 함수에 대해 알아본다. 자바스크립트에서 가장 중요한 개념이다. 스코프, 실행 컨텍스트, 클로저, this, 프로토타입, 모듈화 등 모두 함수에서부터 시작된다. 프로그래밍 언어에서 함수는 일련의 과정을 문(statement)으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다. 간단히 용어를 정리해보자. 매개변수(parameter) : 함수 내부로 입력을 전달받는 변수 인수 (argument) : 입력 출력 (return value) : 출력 function add(x, y) { // parameter return x+y; // return value } add(2,5); // argument 함수 리터럴 자바스크립트의 함수는 객체 타입의 값이다. 따라서 숫자 값을 ..

자바스크립트 기초부터 모던 자바스크립트까지 - 객체편

목표 : 자바스크립트의 객체가 무엇인지 알아본다. 자바스크립트의 이해를 위해 중요한 부분인 함수&스코프를 이해하기 위해서는 객체부터 들어가야 한다. 따라서, 객체의 성질을 먼저 확인한 후 조금씩 확장해 보도록 하자. 객체란? 자바스크립트는 객체(Object)기반의 프로그래밍 언어이며, 자바스크립트를 구성하는 대의 대부분이 객체다. 원시 값을 제외한 나머지 (함수, 배열, 정규 표현식 등) 모두 객체로 이루어져있다. 원론적인 개념이 아니라 자바스크립트에서 객체는 다양한 타입의 값(원시 값 또는 다른 객체)을 하나의 단위로 구성하는 복합적인 자료구조(Data Structure)다. (원시 값은 단 하나의 값만 나타낸다) 또한, 원시 값은 변경 불가능한 값이지만, 객체타입의 값, 즉 객체는 변경 가능한 값이다..

자바 기초부터 모던 자바까지 - 함수형 프로그래밍 편

목표 : 자바에서의 함수형 프로그래밍에 대해 알아본다. 왜 함수형 프로그래밍이 도입되기 시작했을까? 객체 지향 프로그래밍의 정수였던 java에서 왜 새로운 패러다임을 도전하게 된 것일까? 결국에는 애플리케이션의 요구 조건 변경에 대응하는 절차였다. 먼저 그 흐름을 따라가 보도록 하자 여행 정보를 조회하는 클래스가 있다. 국가명을 통해 조회하며, 그 결과를 리스트로 제공한다. SearchTravel 이라는 이 클래스에는 searchTravelInfo(String country) 라는 메소드로 이를 제공하고 있었다. 새로운 요구사항이 등장했다. 국가명도 제공해야하지만, 도시명으로도 제공해야했다. 그에 따라 2가지 변경 방안이 등장하게 된다. 도시 정보를 파라미터로 받아서 처리할 수 있는 메서드를 추가한다. ..

Programming/Java 2022.07.03

자바 기초부터 모던 자바까지 - 인터페이스 편

목표 : 자바의 인터페이스에 대해 알아본다. 인터페이스 인터페이스가 무엇인지 그에 대한 개념을 설명하지는 않겠다. 자바는 다중상속을 지원하지 않는다거나, 추상화에 대한 내용을 모른다면 잘 정리된 다른 포스팅을 찾아 보도록 하자. 자바8부터 람다와 함수형 프로그래밍을 적용하기 위해 인터페이스를 활용하기 시작한다. 그럼 기존의 인터페이스에는 무슨 문제점이 있었고, 어떻게 진화해 온 것인지 먼저 알아보려 한다. 인터페이스의 문제점 인터페이스는 주로 여러 개의 구현체를 통일화한 명세서로 정의하기 위해 사용한다. 그러면 인터페이스를 구현한 클래스들은 동일한 메소드 명으로 통일성을 확보하고, 구현 방법에 상관없이 자신이 원하는 메서드를 호출해 목적을 이룰 수 있다. 그러나, 가장 치명적인 단점은 명세서기 때문에 수..

Programming/Java 2022.07.03