프로그래밍 언어
-
Javascript - 배열 선언하는 여러가지 방법프로그래밍 언어/Javascript 2021. 1. 16. 15:30
javascript를 사용하다보면 배열을 쓸 일이 정말 많다. 화면을 다루는 언어이기 때문에 리스트, 값들을 담고 있는 경우가 많기 때문인 것 같다. 예를 들면 api로 어떤 리스트를 받아와서 담은 후에 화면에서 처리하거나, 셀렉트 박스에 담을 리스트를 선언하는 등의 경우 들이있다. 그런데 사실 웹을 개발할 때는 초기화를 안하고 api에서 값을 받을 때 결과 값으로 초기화 하는 경우도 있고 단순히 []로 선언하여 사용하는 경우가 있다. 그리하여 나는 사실 자바스크립트의 배열을 선언하는 방법을 제대로 모르고 있었다. 그리하여 오늘 어떻게 선언하는지에 대해 소상히 알아보도록하겠다. 먼저 배열을 선언하는 방법은 여러가지가 있는데, 초기 값을 넣는 방법도 여러가지가 있다. 아래와 같은 방법으로 빈 배열을 선언 ..
-
Javascript - Array를 Queue처럼 사용하기프로그래밍 언어/Javascript 2021. 1. 15. 10:38
이전 시간에는 자바스크립트의 배열을 사용해서 스택처럼 사용하는 방법에 대해 알아봤다. 오늘은 배열을 사용해서 queue처럼 사용하는 방법에 대해 알아보겠다. stack과 queue의 차이는 간명한데, stack은 last in first out이고 queue는 first in first out이다. 즉 큐는 정의로운 사회이고 스택은 고통받는 사회인 것이다. 선착순의 원리가 작용하는 곳이 queue이다. 어떤 경우에 queue와 stack를 사용하는지는 코딩테스트 문제를 해결하다보면 알 수 있는데, 그것은 다른 시간에 다뤄보도록 하고 오늘은 queue를 어떻게 만드는지에 대해 알아보겠다. Splice - dequeue의 기능 queue도 사실상 stack과 거의 같은 방식으로 구현된다. Splice를 사용..
-
Javascript - Array를 스택처럼 사용하기프로그래밍 언어/Javascript 2021. 1. 14. 12:14
Javascript에서는 Java처럼 스택을 따로 지원하지 않는다. 그래서 코딩테스트를 볼 때 javascript를 쓴다면 꽤나 당황할 수 있다. 그러나 다행히도 Array에서 제공하는 기본적인 기능을 사용하면 stack을 만들지 않고도 stack처럼 사용할 수 있다는 사실을 알고 있는가? 오늘은 어떻게 Array를 스택처럼 사용할 수 있는지에 대해 알아보겠다. 그렇게 하기 위해서는 먼저 Array에서 제공하는 몇가지 함수들을 알아야 한다. Splice - Pop의 기능 Splice는 Pop의 기능을 대체해서 사용할 수 있다. Slice와 간혹 헷갈리곤 하는데 Splice는 잘라낸 부분을 return해주는 배열의 기본 함수이다. 예를 들어 [0,1,2,3,4]라는 배열이 있다고 하자. 이 배열의 4번째 ..
-
Java - Iterator가 존재하는 이유프로그래밍 언어/Java 2021. 1. 6. 19:18
Iterator 자바를 프로그래밍할 때 Iterator를 사용해본 적은 아마 없는 것 같다. 왜 사용해야하는지도 잘 모르겠고, 코드가 더 복잡해지는 것 같고 손이 더 많이가서 불편하다는 생각이 든다. 그러나 필시 Iterator는 StringBuilder처럼 존재하는 이유가 있을 것이다. 오늘은 그 이유에 대해서 알아보자. 먼저 Iterator를 사용할 수 있는 것은 Collection을 상속받은 클래스들이다. 예를 들면 List, Set, Map, Queue 등이 있다. 다른 자료구조들에서는 get을 하던지, pop을 하던지해서 내부의 데이터를 읽을 수 있다. 그러나 Set에서는 get이 없어서 iterator를 사용하지 않으면 값을 읽어올 수가 없다. (몰랐음) 그러나 그러면 Set에서만 쓰면 되는 ..
-
Java - Try Catch문의 오버헤드프로그래밍 언어/Java 2021. 1. 4. 22:23
코딩을 하다보면 Exception이 발생할 수 있기 때문에 예외 처리를 통해서 프로그램이 망가지는 것을 막을 수 있다. 그러나 잘못되게 try catch문을 남용하게 된다면 성능상 엄청난 문제가 올 수도 있다. 특히나 loop문에서의 잘못된 예외 처리는 엄청난 문제를 야기할 수 있다. 필자는 코딩테스트를 공부하면서 HashMap이 비어있을 때 값을 조회하면 NullPointException이 나는 것을 방지하기 위해서 loop에서 try catch를 사용했었다. 그런데 효율성 테스트에서 말도 안되게 느린 성능을 보여주며 fail 되는 것이다. 코드를 아무리 살펴봐도 O(n)의 Time Complexity를 가졌는데 이해가 가지 않았다. 그러다가 다른 분들의 코드를 참고하며 연구를 하던 중에 다른 코드는 ..
-
Java - String pool이란?프로그래밍 언어/Java 2021. 1. 3. 19:00
String Pool 자바에서 String은 특별하게 String pool이 있어서 거기서 관리가 된다고 하는데, String이 어떻게 관리되는지 한 번 알아보자. String은 자바를 만드신 분들이 특별히 많이 사용될 것을 감안하여 자바의 성능을 위해 특별관리 대상이 되었다고 한다. 작동 방법 먼저 String Pool은 JDK1.7 부터는 Heap Memory 영역에 존재한다. 그리고 일정 크기의 pool을 할당 받을 것이다. String이 선언되면 String pool에 반드시 string literal이 생겨난다. 그리고 추후에 같은 값을 찾는 경우가 생기면 해당 값이 있는지 확인 한 후에 메모리 주소를 반환해 준다. 디자인 패턴 이 패턴은 Flyweight Design pattern이 사용된 사..
-
Java - String과 String Builder프로그래밍 언어/Java 2021. 1. 3. 18:31
서론 - StringBuilder를 왜 사용하지? 평소에는 문자열을 사용할 때 그저 String을 만들어서 사용하고 지지고 볶는 프로그래밍을 해왔다. 그러던 어느날 알고리즘 문제들을 보니 스트링을 다룰 때는 대부분 StringBuilder를 사용해서 다루었다. 사용적인 측면에서 봤을 때는 StringBuilder를 새로 만들고 거기에 계속해서 append()같은 함수를 붙여줘야하니 굳이 왜 저렇게 하나 궁금증이 생겼다. 먼저 알고리즘 문제에서 굳이 StringBuilder를 사용하는 이유는 여러분도 잘 아시겠지만 더 빠르기 때문이다. 그렇다면 왜 더 빠른지에 대해서 String의 특성을 파헤쳐보며 알아보자. String은 immutable 하다. 이게 무슨 의미인가? 분명 String의 값을 바꿀 수 있..
-
Java - Stream이란?프로그래밍 언어/Java 2021. 1. 3. 17:11
Stream 자바 JDK 1.8부터는 Stream이라는 api가 추가되었다. 스트림에서는 데이터를 가공하는 api들을 제공해주는데, 배열, 리스트 같은 집합들을 손쉽게 다루기 위한 메소드들이 주를 이룬다. Stream vs Collection 스트림과 컬렉션은 둘 다 배열 같은 연속된 값을 저장하는 자료구조 형태이다. 둘의 차이점은 데이터를 계산하는 시점이고 데이터 계산을 외부적으로 하는가 내부적으로 하는가에 있다. 먼저 컬렉션은 메모리에 필요한 값을 저장해야하기 때문에 저장하기 전에 값들이 미리 계산되어 만들어져 있어야한다. 또 외부 반복을 통해 직접 사용자가 요소를 반복 계산해야한다. 반면에 스트림은 기존의 데이터를 가지고 새로운 데이터를 만들어내는 것이기 때문에 내부반복을 통해서 값을 생성해준다. ..