본문 바로가기

전체 글57

람다식(Lambda Expression) 람다식(Lambda Expression) : 함수(메서드)를 간단한 식(expression)으로 표현하는 방법 함수 vs 메서드 근본적으로는 같지만, 함수는 클래스에 독립적이고 메서드는 클래스에 종속적이다. (클래스 밖에 메서드를 정의할 수 없다) 함수는 일반적인 용어이고 메서드는 객체지향개념 용어이다. 메서드를 람다식으로 바꾸는 방법 int square(int a) { return a * a; } 1. 반환타입과 메서드이름을 지운다. (int a) { return a * a; } 2. 매개변수 오른쪽에 화살표( → )를 추가한다 (int a) -> { return a * a; } 3. 반환값이 있는 경우, 식이나 값만 적고 return문 생략가능하다. (세미콜론도 생략가능) (int a) -> { a .. 2023. 7. 15.
재귀함수 사용 시 코드 실행시간을 단축하는 방법 (C++) 재귀 문제를 풀면서 분명 같은 로직인데 실행시간이 많게는 10배이상 차이나는 것을 보았다. https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 14889번 문제는 N제한이 20이하이므로 순열을 사용하여 스타트팀과 링크팀으로 나눈다면 시간복잡도가 최대 20! = 2,432,902,008,176,640,000 이 되어버리기 때문에 재귀(백트래킹)를 사용하여 풀어야한다. void solve(vector a, vector b, int idx) { if (idx == n + 1.. 2023. 7. 14.
이펙티브 자바 아이템29까지 읽고 느낀점 이펙티브 자바를읽으려고 마음먹었던 가장 큰 계기는 개발바닥 유튜브에서 진행했던 '랠릿 이력서 리뷰'를 보면서 나의 공부 방향이 잘못되었음을 느꼈고 기초부터 다시 공부해야겠다는 생각이 들어서이다. 각종 백엔드 개발자 공고를 보면 MSA, kafka, 등등 이름만 들어도 무시무시한 기술들을 우대사항으로 넣고 CQRS, 퍼사드 등등 여러 고급패턴의 존재를 보며 이걸 어디서부터 공부해야하지 라는 생각이 들었다. 하지만, 이러한 생각의 방향이 잘못되었다는 것은 이펙티브 자바를 보면서 깨달았다. 다양한 디자인 패턴(싱글톤, 정적 팩토리), 자바 제네릭, 컬렉션 등 자바의 기초적인 내용도 제대로 알고 있지 못하면서 위의 고급 기술들을 배워보겠다고 나댔던 내가 부끄러워졌다. 앞으론, 싸피 과정과는 별개로 자바 기초를 .. 2023. 7. 10.
백준 + 프로그래머스 + SWEA 자동 커밋 익스텐션 백준허브 설치 https://chrome.google.com/webstore/detail/%EB%B0%B1%EC%A4%80%ED%97%88%EB%B8%8Cbaekjoonhub/ccammcjdkpgjmcpijpahlehmapgmphmk?hl=ko 백준허브(BaekjoonHub) Automatically integrate your BOJ submissions to GitHub chrome.google.com 사용법 https://github.com/BaekjoonHub/BaekjoonHub GitHub - BaekjoonHub/BaekjoonHub: 백준 자동 푸시 익스텐션(Auto Git Push for BOJ) 백준 자동 푸시 익스텐션(Auto Git Push for BOJ). Contribute to .. 2023. 7. 6.
자바 equals와 hashCode 일반적으론 equals는 재정의할 일이 없지만 다음과 같은 상황에선 재정의를 해줘야 한다. 객체 식별성(Object Identity; 두 객체가 물리적으로 같은가)이 아닌 논리적으로 같은지 확인해야 할 때이다. 핸드폰 번호를 저장하는 예시를 보자. 다음과 같은 PhoneNumber 클래스가 있고 public class PhoneNumber { private String a; private String b; private String c; private PhoneNumber() { } public static PhoneNumber createPhoneNumber(String a, String b, String c) { PhoneNumber phoneNumber = new PhoneNumber(); phon.. 2023. 7. 4.
의존 객체 주입 패턴(Dependency Injection) Dependency(의존 관계) : A가 B를 의존한다. ex) 자바 프로그래머는 자바에 의존한다. public class Programmer { private final JavaLanguage javaLanguage = new JavaLanguage(); } 프로그래머가 자바가 아닌 파이썬을 사용하고 싶을 때 프로그래머 클래스의 코드 변경이 일어난다. 즉, '프로그래머는 자바에 의존한다'고 볼 수 있다. 이는 SOLID 원칙 중 OCP(개방-폐쇄 원칙)에 위반하며 코드의 양이 많아질수록 유지보수 또한 어려워진다. 이러한 문제를 해결하기 위해 Dependency Injection(의존 관계 주입)을 사용한다. public class Programmer { private final JavaLanguage .. 2023. 7. 2.