java
-
[Java] java8에서 생긴 람다(Lambda)를 쓰는 이유는 뭘까?(짧음 주의)프로그래밍 언어/자바 & 코틀린 2019. 9. 7. 17:43
java 7까지만 써오던 내가 새로운 회사의 기술 스택으로 람다, 함수형 프로그래밍을 이해해야할 이유가 생겼다. 왜 람다를 사용할까? 주로 인터넷에서 본 이유는 아래와 같다. 1. 간결성 2. 불필요한 코드 증가의 감소 3. 가독성 4. 코드의 재사용성 5. 적은 보일러플레이트 코드(정렬 알고리즘 풀 때 느끼는 @Override comparator...) 6. 병렬 프로세싱의 기회 개인적으로, 간결성에 강조를 하는게 람다였던 것 같다. 솔직히 나처럼 람다를 처음 접하는 사람은 람다의 흐름을 캐치하기가 무척 힘들다. 익숙해지면 함수형 프로그래밍이 읽기 수월하고 코드가 짧아서 좋다고 하는데 그때까지는 코드를 읽는데 어려움이 있다. 그렇다면 기능적으로는? 모든 람다의 핵심은 지연실행(deferred execu..
-
[Java] 왜 private 상수는 관습적으로 private static final로 선언할까?프로그래밍 언어/자바 & 코틀린 2019. 7. 30. 13:09
private static final과 private final의 차이 public으로 사용하는 상수 타입은 enum을 이용하고 있다. 클래스 내부에서만 간단하게 사용할 상수를 만들 때, 아무 생각 없이 private static final을 사용하고 있는 나 자신을 보며 미리 초기화 값을 넣고 상수로 쓸거면 private final만 써도 되지 않나? 라는 의문을 갖기 시작했다. 예를 들면 아래의 예시처럼 일반적으로 사용하고 있었다. public class ChocolateController { // logger를 선언할 때 private static final Logger logger = LoggerFactory.getLogger(ChocolateController.class); // 연차의 코드 값..
-
[Java] 터미널(terminal)로 war 파일 만들고 푸는 법프로그래밍 언어/자바 & 코틀린 2019. 3. 17. 14:46
war 파일 만드는 방법.md war파일로 묶는 법 - terminal로 war로 만들고자 하는 디렉토리로 이동한다. - 만들고자하는 war 파일이름으로 아래와 같이 커맨드를 입력한다. jar cvf [만들고자하는 war파일명].war * 이런식으로 war 파일로 압축한다. war파일 푸는 법 - terminal에서 war파일이 있는 곳으로 디렉토리를 이동한다. - 풀고자하는 war 파일 이름으로 아래와 같이 커맨드를 입력한다. jar xvf [풀고자하는 war파일명].war 요런식으로 war파일을 풀어준다. 출처: https://yangyag.tistory.com/427
-
[Java] java 파일을 class 파일로 컴파일 하는 방법(한글 인코딩 포함)프로그래밍 언어/자바 & 코틀린 2019. 1. 30. 08:48
스프링 프로젝트에서 특정 파일만 class 파일로 컴파일 하려고 했는데, import 되는 대상이 없으면 error가 났다. 컴파일을 위해서는 import 되는 파일이 모두 포함되어 있어야 하는 것 같았는데, 기본적인 java만 class로 만드는 건 어떻게 할까하는 궁금증에 찾아봤다. 요렇게 생긴 java 클래스를 만들었다. HelloWorld.javapackage com.concept; public class HelloWorld { public static void main(String[] args) { System.out.println("안녕? 세계야"); } } java를 class파일로 컴파일 하는 건 간단하다. 해당 경로를 찾아가서 아래처럼 javac 명령어에 java 클래스 명만 불러주면 된..
-
[java] 유효한 날짜인지 체크하는 방법(Validation Date)프로그래밍 언어/자바 & 코틀린 2018. 11. 28. 20:52
validationDate java에서 유효한 날짜인지 체크하는 방법 아무 날짜가 스트링 형태로 입력값이 들어올 경우, 에러 메세지를 띄워주어야 하는 기능을 만들어야 했다. 우리 회사는 java7을 이용하기 때문에 java8에서 향상됐다는 datetime은 사용하지 못한다. 그래서 다른 방법을 찾았다. dateFormat의 setLenient를 사용하는 것이다. 여기서 Lenient의 사전적 의미는 '허술하다, 생각한 것보다 판단이나 처벌이 약하다’라는 뜻이다. java doc을 참조하면 아래처럼 설명하고 있다. setLenient(boolean lenient) Specify whether or not date/time parsing is to be lenient. 날짜가 파싱될 때 허술하게 할 지 말지..
-
Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, at org.apache.log4j.Log4jLoggerFactory.<clinit>웹 개발/에러 해결 2018. 6. 7. 09:45
java.lang.ExceptionInInitializerError 이런 에러가 나면서 jar파일이 충돌되는 것 같았다. 충돌되니까 하나 삭제하면 된다 라는 분도 있었는데, 다른 방법도 있을까 싶어서 스택오버플로우를 뒤져봤더니 다른 해결법을 찾았다. 123456 log4j log4j 1.2.17 Colored by Color Scriptercs pom.xml에서 위의 dependency를 주석처리해주고(혹은 exclusion) maven update 후 실행해보니 해결!
-
[java] 백준 알고리즘 2839번 설탕 배달 풀이 소스알고리즘/백준 알고리즘 2018. 4. 3. 11:08
사칙연산 종류 문제다. 고민하다가 5를 나눠보고 그 나머지 값들로 답을 찾으면 되겠다 싶었다. n을 5로 나눴을 때, 나머지가 1일 경우에는 몫에서 -1을 해주면 5+1을 만들어줄 수 있다. 즉, 6이 되기 때문에 3kg 봉지 2개에 담으면 된다. 나머지가 2일 경우에는 몫에서 -2를 해주면 10+2가 된다. 즉, 12가 되기 때문에 3kg 봉지 4개에 담을 수 있다. (단, n이 7일 경우에는 성립 안됨) 나머지가 3일 경우에는 그냥 3kg 봉지 1개 더 담아주면 된다. 나머지가 4일 경우에는 몫에서 -1을 해주면 5+4가 된다. 즉, 9가 되기 때문에 3kg 봉지 3개에 담을 수 있다.(단, n이 4일 경우에는 성립 안됨) 나머지가 0일 경우에는 5kg 봉지에 다 담아주면 된다. 그럼 4와 7 이외에..
-
[java] 백준 알고리즘 1934번 최소공배수 풀이 소스알고리즘/백준 알고리즘 2018. 4. 3. 11:03
난 문과에 비전공 출신이므로 수학을 싫어하진 않지만, 복잡한 공식을 잘 모르는 편이다. 최소공배수를 구하는 방법도 아래와 같은 방법 밖에 생각나지 않았다. 유클리드 호제법이라는 공식을 이용해 훨씬 빠른 코드를 만들어내시는 분들도 계셨지만, 내가 아는 지식으로 해답을 찾기 위해 고민해서 해결했다. 위에 올려둔 그림을 그대로 소스로 옮겨 놓으려고 애썼다. '컴퓨터가 인간처럼 대충 이 수가 들어가면 빠르겠다'같은 경우를 만들어주기 힘드니 숫자가 차례대로 올라가면서 나눠주는 방식으로 만들었다. 아래 풀이소스 * 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 public cl..