Programming 85

이펙티브 자바 - 1, 2장 개요, 객체 생성과 파괴

개요 매주 이펙티브 자바를 한 단원씩 공부하기로 했다. 자바 개발자로 일하면서 애매하게 알고넘어갔던 부분과 심화적으로 알고있어야 할 내용을 배우기위해서 이펙티브 자바를 선택했다. 어려운 책이라고 후기들을 봤고, 선배 개발자와 얘기해도 어려운 책이니 잘 안읽힌다고 들었지만, 어렵다고 미루기보단 지금부터 봐 둬야 나중에 다시보는 일이 있어도 보기 수월할 것 같았다. 그러므로 시작해보겠다. 1장 : 들어가기 자바 입문자가 아닌 자바에 익숙한사람을 위한 책이라고 설명하며 시작한다. 나 역시 자바 개발자라고 하지만 입문자나 마찬가지라고 생각한다. 문법만 안다고 전부를 아는건 아니며, 알고 쓰는것과 모르고 쓰는것은 다르다는 것을 알고 있기 때문이다. 이 책에선 성능적인 부분도 있지만 그보다 명확하고 정확하고 유용하..

Programming/JAVA 2022.02.20

Linux - 파일 찾기, 파일의 정보 확인하기

개요 리눅스를 통해 서버에 있는 파일이나, 리눅스상에 있는 파일의 상태를 확인하거나, 코드를 조회하고 찾아야할때가 많을겁니다. 이때 사용할 수 있는 다양한 명령어들을 공부해보았습니다 ! 명령어 명령어 의미 사용법 cat 파일의 내용을 출력, 두개 이상의 파일을 합쳐서 출력도 가능 $ cat file head 해당 파일의 첫줄부터 출력 $ head -n2 file (-n2 : 첫줄부터 2번째줄까지) tail 해당 파일의 마지막줄부터 출력 $ tail -n2 file grep 해당 파일에서 찾고자하는 문자열을 검색해서 해당 열 출력 $ grep hello file ('hello'라는 문자열을 file 에서 검색) cmp 두개의 파일을 비교한다. $ cmp fil1 file2 (byte , line으로 다른 ..

Programming/Linux 2022.02.13

Linux - 에디터 사용해 편집해보기

개요 이제 간단한 조작 명령어를 통해 생성한 파일이 있다고 칩시다. 저는 예제를 만들기 위해, mkdir workspace 를 통해 디렉토리를 생성한 후 touch Hello.java 명령어를 통해 Hello.java 파일을 생성했습니다. 그리고 vi 편집기를 사용해 편집하기 위해 접속해 보도록 하겠습니다. vi 에디터 먼저 vi 에디터를 사용하기 위해 Hello.java 를 생성했었다고 했죠? 여기에 vi 명령어를 이용해 vi Hello.java 를 하면 에디터 환경으로 들어오게 됩니다. 이렇게 아무것도 없는 화면이 나온다면 vi 에디터에 접속하신겁니다. 밑에 파일명만 보이죠? 여기선 vi 에디터의 명령어를 사용해야 합니다 i 를 눌러주세요 INSERT 라는 뜻입니다. 이렇게 insert 모드에서 입력..

Programming/Linux 2022.02.11

Linux - 가상머신과 우분투 (ubuntu) 설치 및 공부하기.

설치 나는 맥북m1 환경에서 리눅스와 우분투를 설치해 공부해보기로 했다. 먼저 우분투라는 os환경을 만들어 주기 위해, 먼저 UTM이라는 가상머신을 선택했는데, UTM 말고도 버츄얼머신, 도커등등 많은 가상머신이 있었지만, 무료로 m1 환경에서 호환이 가능한 머신을 찾다가 UTM으로 설치하게 되었다. 설치는 건너뛰고, 우분투 실행 후 단계부터 리눅스 명령어공부를 목적으로 포스팅한다. 명령어 명령어 의미 비고 mkdir 디렉토리(폴더) 생성 rmdir 디렉토리(폴더) 삭제 rm 파일 삭제 rm -r (재귀적 실행법으로 하위파일부터 모두삭제) rm -ri (하나씩 확인하면서 모두 삭제) cd 위치 이동 ls 현재 위치의 파일 및 디렉토리 확인(조회) pwd 현재 위치 확인(경로 확인) touch 현재 위치에..

Programming/Linux 2022.02.06

자료구조 - 큐(queue), 간단한 코드로 파악하기

개념 큐(queue), 역시 스택과 비슷하게 데이터를 일시적으로 쌓아놓기 위한 자료구조입니다. 다만 차이점은 가장 먼저 넣은 데이터를 가장 먼저 꺼내는 선입선출(FIFO, First In First Out) 구조입니다. 실 생활에서 예를 들자면 마트의 대기열이나, 은행 창구에서 차례를 기다리는 순서라고 이해하면 편합니다. enqueue : 인큐 라고 불리며, 큐에 데이터를 삽입하는 작업을 뜻합니다. dequeue : 디큐 라고 불리며, 인큐의 반대로 데이터를 꺼내는 작업을 뜻합니다. front : 프런트는 데이터를 꺼내는 out 쪽을 뜻합니다. rear : 리어는 데이터를 넣는 쪽을 뜻하며 back이라고도 불립니다. 큐를 구현하기 쉬운방법은 역시 배열입니다. public class IntQueue { p..

프로그래머스 - 2016년 (JAVA)

문제 설명 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요. 제한 조건 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다) 입출력 예 abresult 5 24 "TUE" class Solution { public String solution(int a, int b) { String answer = ..

자료구조 - Stack 를 간단한 코드로 파악하기

개념 스택(Stack)이란? 데이터를 저장하기 위한 자료구조중 하나로 데이터를 일시적으로 저장하기 위해 고안된 개념이며, 가장 나중에 넣은 데이터를 가장 먼저 꺼내는 방식으로 진행됩니다. 데이터의 입출력 순서를 후입선출(LIFO, Last In First Out) 이라고 불리며, 간단하게 표현하자면 가장 나중에 넣은 데이터를 가장 먼저 꺼냅니다. 사용단어? push : 스택에 데이터를 넣는 작업 pop : 스택에서 데이터를 꺼내는 작업 top : 푸시와 팝이 이루어지는 가장 바깥쪽을 탑이라 합니다 bottom : 스택의 가장 아랫부분, 푸시가 가장먼저 이루어졌던 데이터의 위치를 바텀이라고 합니다 peek : 피크(peek)란 '몰래 엿보다'라는 뜻을 가지며 스택의 가장 상단의 top 인덱스를 보여줍니다...

스프링부트 - SXSSF 형식으로 엑셀 다운로드 모듈만들기

개요 회사에 입사 후 기존의 엑셀 처리는 Jxls 방식으로 처리되었었다. 이 방식은 미리 템플릿을 원하는 페이지나 형식마다 따로 만들어야했고, 대용량의 데이터를 처리할 땐 너무 오래걸리거나 이로인해 거래처에서 여러번 시도하다가 동시에 Request 가 생겨 OOM 발생이 발생해 서버에 무리를 주는 상황이 발생한 경우도 있었다. 이런 리스크나 성능면에서 떨어져 poi 라이브러리에서 제공되는 sxssf 방식으로 변경업무를 진행했다. SXSSF 방식은 일정 용량을 넘어선 처리에선 자동으로 메모리를 관리해 서버에 부담이 적다는 점과 속도가 무난하다는 장점이 있다. 더 다양한 이유와 설명이 있겠으나, 자세한 점은 생략하고 본론으로 들어가겠다. 프로세스 기존의 프로세스는 EXCEL 버튼을 클릭할 경우, 페이지에서 ..

Programming/Spring 2022.01.05

프로그래머스 - 완주하지 못한 선수(JAVA)

문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예participantcompletionreturn ["leo", "kiki",..

알고리즘 기초연습부터 - 1부터 n까지 더하기

개요 코딩테스트 연습을 하는중에 알고리즘 기초부터 차근차근 블로그에 올려보면 좋겠다고 생각했다. 아직 알고리즘과 자료구조가 많이 약해서, 지금부터 공부하지않으면 나중에 후회할거같다는 생각에 정리해보겠습니다. 처음엔 1부터 n까지의 수를 구하는 것입니다. 다들 코딩테스트 시작하실 땐 이런문제부터 풀었던거 같아요. 처음엔 어려워하겠죠? 물론 자바 기준으로 합니당.. 1부터 n까지의 합 구하기 예를 들어 구하는 값인 n 이 3이라면, 1 + 2 + 3 = 6 일것입니다. 이처럼 n의 값까지의 정수를 모두 더해야하는 경우, 반복문을 통해 이를 해결합니다. 먼저 for문을 통해 구해보겠습니다. int n = 3; //구해야 하는 값 n이 3이라면? int sum = 0; for(int i = 0; i