Java 24

[Do it!] 섹션0.코딩테스트 준비하기

[시간 복잡도] 시간 복잡도 도출 기준1. 상수는 시간 복잡도 계산에서 제외한다.  예시1-1) 연산 횟수가 총 1,000,000번인 경우 (연산 횟수가 N이다.)int N = 1000000;int cnt = 0;for (int i = 0; i    예시 1-2) 연산 횟수가 총 3,000,000번인 경우1,000,000번씩 연산하는 for문이 3번이 있으므로 총 3,000,000번을 수행한다. 연산 횟수가 3N (3번씩 1,000,000번)이므로 상수인 3은 무시하고 N(1,000,000번)으로 생각하면 된다.int N = 1000000;int cnt = 0;for (int i = 0; i    예시 1-2의 연산 횟수는 예시 1-1의 연산 횟수보다 3배가 차이가 나지만, 코딩 테스트에서는 일반적으로 ..

[Java] 제네릭의 이해2

제네릭의 이해 2에서는 제네릭 타입 제한과 와일드카드에 대해서 다뤄보려고 한다.     [제네릭의 이해 1 ] 링크는 아래 참고..  [Java] 제네릭의 이해1이번에 기능 개발에 참고하고 싶은 코드가 제네릭으로 되어있어서, 제대로 이해하고 사용하고 싶어서 공부하게 되었다. 예전에는 정확히는 알지 못했지만, 자바 기본서나 선배들이 작성해 놓은run-ran-run-ant.tistory.com   제네릭 타입 제한의 필요성 아래와 같이 관계도가 있다고 가정해 보자.    그리고 VIPUserCategory 클래스로 예시를 들어보려고 한다. class VIPUserCategory { private T t; public void set(T t){ this.t = t; } ..

Java/Java 2024.05.07

[Java] 제네릭의 이해1

이번에 기능 개발에 참고하고 싶은 코드가 제네릭으로 되어있어서, 제대로 이해하고 사용하고 싶어서 공부하게 되었다. 예전에는 정확히는 알지 못했지만, 자바 기본서나 선배들이 작성해 놓은 코드에 있는 것을 한 번씩 봤었다. 제네릭이 어떤 의미이고, 어느 환경에서 쓰이는지 알아보려고 한다.         제네릭(Generic)이란?데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법이다. 클래스 내부에 형식을 지정하는 것이 아니라 사용자가 외부에서 지정해 사용하는 것을 의미한다.  (처음엔 이해가 안 되지만, 이해를 한 후 다시 읽는다면 의미 파악이 될 것이다.)  우리가 평소에 사용하는 List 클래스를 사용할 때, 이미 제네릭을 사용하고 있었다.List list1..

Java/Java 2024.04.30

[공통] 자바 네이밍 규칙

[공통] 1. 대소문자가 구분되어야 하고, 길이에 제한이 없다.주석을 사용해서 변수를 설명하는게 아니라 변수명을 길게 하더라도 의미부여를 명확하게 해야 한다.  2. 자바에서 사용하고 있는 예약어는 사용하지 않는다.예) class, import, break 등  3. 숫자로 시작하면 안 된다.  4. 특수문자는 '_(언더바)'와 '$'만 허용한다. 단, 자주 사용하지는 않는다.//변수명에 사용하는 예시int my_variable = 10;String user_name = "John";//메서드명에 사용하는 예시public void calculate_total() { ... }private String format_text() { ... }//클래스명에 사용하는 예시public class User_Deta..

Java/Java 2024.04.25

[Java] 자주 사용하는 Stream 정리

1. 정렬(sort) 1) 다중 조건 정렬 list .stream() .sorted(Comparator.comparing(ChangeBean::getLocation) .thenComparing(ChangeBean::getTarget)) .collect(Collectors.toList()); 2) 데이터 비교 후 정렬 (람다식 사용) List lineData = list.stream() .sorted((o1, o2) -> o2.get("name").toString().compareTo(o1.get("name").toString())) .collect(Collectors.toList()); 3) 정렬시 nullable 할 경우 null 처리 //기존 list.stream().sorted(Comparator...

Java/Java 2024.03.15

[Java] 객체지향프로그래밍(OOP) / SOLID 원칙 이란?

지금 주로 쓰는 언어인 Java는 객체 지향 프로그래밍 언어 중 하나이다. Java를 배우면서 "객체 지향"이라는 말을 제일 먼저 듣고, 제일 많이 들었다. 내가 아는 객체 지향 프로그래밍은 객체를 만들어 재사용을 하며 코드의 효율을 높이는 정도로 이해하고 있었다. 더 깊은 이해를 하기 위해 포스팅을 해보려 한다. [객체 지향 프로그래밍(OOP)이란?] 말 그대로 객체를 지향하는 프로그래밍을 하는 것을 뜻하는데, 그럼 객체는 뭘까? 객체는 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며 값을 저장할 변수와 작업을 수행할 메서드를 서로 연관된 것들끼리 묶어서 만든 것을 뜻한다. 참고했던 블로그 중 객체 지향 프로그래밍을 "레고"에 빗대어 표현했다. 레고 각각의 조각은 객체가 되고,..

Java/Java 2024.02.16

[JPA] JPA(+QueryDSL) vs Mybatis 사용후기

2022년까지의 프로젝트와 2023년의 프로젝트를 비교했을 때 새롭게 적용했던 부분은 기존에 사용하던 Mybatis 대신 JPA + QueryDSL를 사용했다는 점입니다. 해당 기술들을 사용하면서 느꼈던 점과 장단점을 정리해 보려고 합니다. Mybatis의 시작. 회사에 입사하고 나서 기존 프로젝트가 Mybatis를 사용하고 있어서 처음 시작을 하게 되었습니다. SQL 문법만 알면 SQL문을 직접 작성할 수 있고 xml 파일로 분리되어 있어서 SQL문 변경이 있을 경우는 자바 코드수정하지 않고, SQL만 수정해서 바로 반영할 수 있는 편리함이 있었습니다. 더 나아가 Subquery, Join, Union등 복잡한 조건의 쿼리문을 쉽게 작성했었습니다. //로직이 담겨있는 SQL문 with sample_to..

Java/Java 2024.01.04

[프로그래머스/JAVA] 스택/큐 기능개발

1. 문제 문제 설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. 제한 사항 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다. 작업 진도는 100 미만의 자연수입니다. 작업 속도는 100..

[ 프로그래머스/JAVA] 위장 SPY 해시

1. 문제 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. 종류이름 얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다. clothe..

[ 프로그래머스/JAVA] 전화번호 목록 해시

1. 문제 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. 제한 사항 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다. 같은 전화번호가 중복해서 들어있지 않습니다. 입출력 예제 ph..