목록Java (26)
고코딩
백준 4485번 문제 젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주인공, 링크는 지금 도둑루피만 가득한 N x N 크기의 동굴의 제일 왼쪽 위에 있다. [0][0]번 칸이기도 하다. 왜 이런 곳에 들어왔냐고 묻는다면 밖에서 사람들이 자꾸 "젤다의 전설에 나오는 녹색 애가 젤다지?"라고 물어봤기 때문이다. 링크가 녹색 옷을 입은 주인공이고 젤다는 그냥 잡혀있는 공주인데, 게임 타이틀에 젤다가 나와있다고 자꾸 사람들이 이렇게 착각하니까 정신병에 걸릴 위기에 놓인 것이다. 하여튼 젤다...아니 링크는 이 동굴의 반대편 출구, 제일 오른쪽 아래 칸인 ..
[JAVA] Java SE, EE, ME의 차이점 Java SE(Standard Edition) Java SE는 데스크톱 및 서버, 최근의 고사양 임베디드 시스템을 위한 표준 자바 플랫폼으로 표준적인 컴퓨팅 환경을 지원하기 위한 자바 가상 머신 규격 및 API 집합을 포함한다. 따라서 Java EE, Java ME 등 다른 플랫폼은 구체적인 목적에 따라 Java SE를 기반으로 API를 추가하거나 자바 가상 머신 규격 및 API의 일부를 택해서 정의된다. Java SE는 Java Software Development Kit(SDK)으로 구현된다. 대체로 처음에 자바개발에 입문할 때 접한다. Java EE(Enterprise Edition) 자바 플랫폼, 엔터프라이즈 에디션(Java EE)는 자바를 이용한..
[Kotlin] 단순 계산기 만들기 언어를 가장 빠르게 익히는 방법은 무엇일까? 문법 공부먼저 하는것도 좋지만 바로 뭐라도 만들어보는게 가장 좋다. Java만 사용해 오던 나는 최근 Kotlin에 관심을 가지기 시작하였고 코틀린을 공부하기 시작했다. 일단 첫번째는 단순 계산기 만들기!! 나는 안드로이드 개발자가 아니니 콘솔창에서 숫자 2개와 연산자 하나를 입력 받으면 결과가 출력이 되게 하겠다. 개발환경 OS : macOS Big Sur IDE : IntelliJ Language : Kotlin 목적 코틀린스럽게 만들기. 코드 생각해야 할것들 입력받은 문자를 숫자(Integer)로 변환해주어야 한다. 연산자에 따른 switch를 해주어야 한다. 잘못된 입력일때 예외 처리를 해주어야 한다. 1. 입력받은 ..
[Spring Boot] when(), given(), any() 및 BDD 설명 패스트 캠퍼스 강의를 듣던 도중 테스트 구문 작성 코드에서 처음 보는 코드를 보았다. when(this.todoRepository.save(any(TodoEntity.class))) .then(AdditionalAnswers.returnsFirstArg()); //TodoRepository가 save()메소드를 호출해서 TodoEntity값을 받으면 받은 엔티티 값을 반환하도록 설정 원래 given-when-then 의 구조는 알고 있었지만 저렇게 스태틱 함수로 구현되어 있는 건 처음 봐서 이해가 되지 않았다. 여러가지 서치를 해보고 정리를 해본다. 용어 정리 TDD Test Driven Development의 약자로 테스..
Java의 직렬화(Serialize)란? Java를 공부하고 Spring을 쓰다보면 계속해서 Serialize를 상속받은 클래스들을 볼 수 있었다. 도대체 직렬화란 무엇일까? 공부를 해보자 직렬화(Serialize) 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술. JVM(Jaava Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술 역직렬화(Deserialize) byte로 변환된 Data를 원래대로 Object나 Data로 변환하는 기술을 역직렬화(Deserialize)라고 부릅니다. 직렬화된 바이트 형태의 데이터를 객체로 변환해서 J..
CSV 파싱 클래스 만들기 회사에서 고도화 프로젝트를 하던 도중 csv파일을 파싱해야할 일이 생겼다. 당연히 csv파일을 파싱하는 라이브러리가 이미 만들어져있었고, 당연히 가져다 사용하려고 했다. 근데 왠걸... 최소 jdk 1.8이상에서만 작동하는 라이브러리였다. 근데 고객사 서버의 자바 버전은 jdk 1.6(아직 까지도 옛날 자바를 쓰는 회사가 많다고 들었지만 실제로 만날 줄 이야...) 결국 csv파일을 파싱하는 코드를 직접 짰다. 근데 짜놓고 나니 왠걸 생각보다 잘 짰었다. 일단 내가 받은 csv파일은 간단한 파일형식이 아니였다. 설명을 시작해보겠다. , 로 구분하면 되는 거 아니야...? Csv 파일은 형식이 정해져 있다. CSV(영어: comma-separated values)는 몇 가지 필드..
JAVA CSV 파일 ""안의 , 무시하기 링크 참고 일하던중 CSV 읽는 형식을 짜야하는 순간이 왔다. 개발환경이 JDK1.6 이여서 openCSV라이브러리가 작동하지 않는다 ㅜㅜ 단순히 한줄씩 읽어 split(",")으로 잘라주고 싶었지만 예외의 상황이 발생했다. 우리가 알고있던 csv파일 형식은 a,b,c,d,f value1,value2,value3,value4,value5 value11,value22,value33,value44,value55 형식일 것이다. 하지만 만약에 값이 문자열이라면? 그 문자열 안에 ,가 들어가 있는게 정상이라면? split(",")으로는 문제가 발생할 것이다. a,b,c,d,f value1,"Value2 have , char value",value3,value4,valu..
log4j Java 실행시 에러 log4j:WARN No appenders could be found for logger (org.quartz.impl.StdSchedulerFactory). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.slf4j 로그를 쓰고싶었는데 실행하니 위와 같은 에러가 떴다. 여러 블로그를 참조해 보고 찾아봤지만 나는 실행환경이 Simple Java Project여서 의존성 추가나 slf4j 설정을 만져주는 등 나에게는 올바르지 않았다. 그러던 중 간단한 해결 방법을 찾았다. 역시..
[백준 17179번] 케이크 자르기 JAVA 케이크 자르기 이분탐색은 가장 감을 잡기 어려웠던 문제였다. 이분탐색이라는 것 자체는 알고 있었는데 이걸 활용하려고 하니 도대체 무엇을 탐색해야할지 모르겠다. 문제를 읽어보면 가장 작은 조각의 길이의 최대값을 출력하라라고 되어있다. 이분탐색에서는 우리가 찾고자하는 값을 정렬하여 이분탐색한다. 근데 문제에서 찾고싶은 값은 가장 작은 조각의 길이의 최대값? 가장 작으면서 최대값이라니 도저히 같이 쓰일수 없는 단어 두개가 같이 쓰였다.(작으며 최댁삾...) 이제부터 잘 생각해보자. 케익을 Q등분 할 것이다. Q등분 했을때 그중에는 가장 작은 길이를 가진 조각이 나온다 Q등분할 수 있는 방법은 엄청 많다. 이렇게 생각하면 갑자기 브루트포스 방식으로 풀어야 한다. 이렇..
Scouter APM APM (Application Performance Mornitoring) LG CNS : 컨설팅, 시스템통합 등 IT 서비스를 공급하는 LG그룹 계열의 정보기술 솔루션 및 아웃소싱 전문기업이다. 벤더(VENDOR) : IT업체에서의 벤더 개념은 일반적으로 판매인 또는 판매업자를 가리키는 말입니다. 특히 컴퓨터 시스템의 하드웨어나 소프트웨어 제품을 사용자에게 판매하였을 때 그 제품의 브랜드에 대해 책임을 지는 기업으로서 벤더는 제조업체일 수도 있고 판매 회사가 아닐 수도 있습니다. 어느 특정 회사의 제품만으로 시스템을 구축하는 것을 싱글 벤더라 하며 여러 회사 제품을 조합하여 시스템을 구축하는 것을 멀티벤더라고 합니다. XLog차트 : XLog차트는 모든 요청에 대해 하나의 점으로 ..
SpringBoot JPA 순환 참조 문제 및 해결 토이 프로젝트를 진행하던 중 순환참조 문제에 마주하였다. 순환 참조란 무엇일 까? 순환 참조(Circular reference)란, 참조하는 대상이 서로 물려 있어서 참조할 수 없게 되는 현상을 말한다. JPA에서는 양방향으로 연결된 Entity끼리 조회하는 경우 서로의 정보를 순환하면서 조회하다가 stackoverflow가 발생하게 된다. 그럼 순환참조가 왜 일어나는 것일까? JPA에서 순환참조 이유 Spring Boot는 @ResponseBody를 선언 할시 Object를 json상태로 변환하기 위해 Jackson라이브러리를 이용합니다. Jackson은 직렬화를 이용해서 json 형태로 객체를 변환시키게 됩니다. 직렬화란? 객체의 직렬화는 객체의 내..
이진탐색 이진 탐색이란 정렬되어 있는 배열에서 원하는 값을 찾아내는 탐색 방법중 하나이다. 이진탐색은 처음부터 찾는 것이 아니라 양 끝에서 부터 시작해 중간값과 찾으려는 값을 비교해서 배열을 2개로 나눠 찾으려는 값이 속한 배열에서 다시 이진탐색을 하는 방법이다. 처음부터 찾는 일반 탐색과 속도측면에서 매우 빠른 방법이다. 가장 주의해야 할 점은 이 탐색은 정렬된 배열에서 써야하는 것이다. 배열에서 찾으려는 값의 인덱스 번호를 리턴해주는 함수이다. 만약에 찾는 값이 없다면 -1을 리턴함 public int binary_search(int item, int[] numbers) { int left=0; int right = numbers.length-1; while(right >= left) { int mi..