java(16)
-
[Java] Lambda Expression Quick View
Lambda 표현식은 Java 8 버전에서 정식 발표되었다. 함수형 프로그래밍을 지원하기 위해 Java가 첫번째로 도입한 것이 바로 Lambda 표현식이다. 함수형 프로그래밍을 공부하다 보면 Pure Function(순수 함수), higher-order function(고계 함수) 등 다양한 함수들을 만나게되는데 Lambda는 그중 anonymous function(익명 함수)의 특성을 가지고 있다. 따라서 우리가 알고 있는 일반적인 함수와 달리 Lambda는 함수의 이름이 없다. Lambda는 Class에 속하지 않고도 그 자체로 생성이 가능하다는 주요한 특징이 있다. 또한, 변수처럼 파라미터로 전달하거나 특정 요청에 의해 언제든지 실행될 수 있다. Lambda는 간단한 이벤트 리스너나 콜백함수로 사용..
2021.12.20 -
GraphViz를 통해 함수 호출 그래프 그리기
개발을 하다보면 종종 복잡한 비즈니스 로직을 구현해야 할때가 있다. 이런 복잡한 로직은 시간이 지나 다시보면 한눈에 쉽게 들어오지 않는다는 문제가 있었다.(나만 그런가) 그래서 내가 개발한 프로그램에 대해서 함수의 호출관계를 한눈에 보여주면 꽤 유용할것 같아 심플한 프로그램을 하나 만들어 봤다. 현재 회사에서 화면을 구현할때 Inswave에서 만든 WebSqaure라는엔진을 사용하는데(Javascript를 베이스로 한다.) 해당 소스파일을 분석해야할 일이 있어 WebSquare 문법을 분석해서 호출 그래프를 그려주는 프로그램을 만들었다. WebsSquare의 문법은 Javascript와 유사하며 Map에 함수를 할당하는 방식을 사용한다. 샘플에선 scwin이라는 변수명을 가진 맵을 사용했다. Javasc..
2021.10.13 -
[알고리즘/자바] 백준 1316번 - 그룹 단어 체커
1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 입력된 문자에 존재하는 알파벳이 연속되는지 확인하는 문제이다. 아이디어 1. 입력된 문자에 존재하는 알파벳을 구한다. 2. 알파벳이 연속되는지 확인한다. 3. 현재의 index가 이전의 index보다 +1인 경우는 연속이며 그렇지 않은 경우는 불연속이다. 4. 문자내에 알파벳이 하나만 있는 경우는 연속으로 처리한다. 구현 getAlphabet 함수를 만들어 입력된 문자내에 존재하는 알파벳을 ArrayList로 반환하도록 한다. s..
2021.07.27 -
[알고리즘/자바] 백준 5622번 - 다이얼
5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net 전화기의 번호를 누르기 위해선 몇초간 기다리는 시간이 필요하며, 각 번호에는 3~4개 알파벳이 매핑 되어있다. 입력은 번호가 아닌 알파벳으로 주어지며 이 알파벳을 보고 전화를 거는데 걸리는 시간을 구하는 문제다. 첫번째 아이디어. 문제에 각 알파벳을 선택하는데 소요되는 시간은 이미 확정 되어있다. A,B,C는 3초가 소요되며 D,E,F를 선택할때는 4초가 걸린다. 아스키 코드를 통해 문자를 10진수 정수로 변환했고 아래와 같은 방법으로 알파벳을 선택하는데 걸린 시간을 구했다. 이런식으로 풀면 정답일줄 알았는데 한가지 실수가 있었다. (위에 형광펜..
2021.07.14 -
[알고리즘/자바] 백준 2164번 - 카드2
2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 문제에서 알려준 동작을 정직하게 Java의 Stack을 통해 구현했다. 1부터 N까지의 숫자를 Stack에 넣고, while문을 통해 문제에서 제시한 동작을 수행하도록 했다. 아니나 다를까 시간초과ㅠㅠ 이렇게 하면 정답은 나오겠으나 입력 N이 커질수록 수행 속도가 떨어져 시간초과가 발생한다. 아래는 시간초과가 발생했던 코드. ( Java의 Stack을 썻던 이유는 Queue와 달리 Stack은 add를 통해 Top이 아닌 Bottom에도 데이터를 넣을 수 있기때..
2021.05.28 -
[디자인패턴] 커맨드 패턴(Command Pattern)
Head First Design Patterns를 읽고 학습한 내용을 기록합니다. 0. 커맨드 패턴 정의 아래는 책에 쓰여있는 커맨드 패턴의 정의. 커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있습니다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업취소 기능도 지원 가능합니다. 커맨드 패턴은 결과를 위한 계산과정의 각 부분들을 캡슐화 시킬 수 있다. 계산의 결과를 원하는 클라이언트는 사실 과정은 궁금하지 않고 결과만 올바르게 출력되면 된다. 이런 Needs에 의해 커맨드 패턴은 계산과정을 캡슐화하고, 클라이언트는 단순히 계산을 해달라는 명령만 수행함으로써 원하는 결과를 얻어낼 수 있다. 실습을 하면서 조..
2021.03.07