java

Java지식

Java의 effectively final이란?

최근 알고리즘 문제를 풀면서 스트림과 람다를 가끔 활용하곤 하는데, 위와 같은 경우를 몇 번 맞닥뜨리게 되었습니다. 읽어보면, "람다 표현식에서 사용하는 변수는 final이거나, effectively final이어야 한다..." 라고 하는데 이에 대해 알아보겠습니다. 순서는 그렇다면, effectively final은 무엇인지, 왜 람다 표현식에서 사용하는 변수는 final이거나, effectively final이어야 하는지 와 같겠습니다. effectively final effectively final은 람다 표현식이 등장한 자바 8에 함께 등장했습니다. 이는 final 키워드가 선언되지 않았지만, 값이 재할당되지 않아 final 변수와 유사하게 동작하는 변수를 의미합니다. 자바 언어 스펙을 살펴보면 ..

Java지식

기본 자료형과 참조 자료형

JVM과 메모리에 대해서 다루기 전에, 또한 GC에 대해 알기 전에, Java의 자료형에 대해 알아야 할 필요가 있다고 생각해 정리해보고자 합니다. 자료형의 종류 자바는 크게 기본 자료형(Primitive Type)과 참조 자료형(Reference Type)라는 2개의 자료형을 가집니다. 기본 자료형은 8가지(byte, boolean, char, int, short, long, float, double)가 있습니다. 그리고 위 8가지를 제외한 나머지는 모두 참조 자료형입니다. 또한 참조 자료형은 사용자가 직접 정의한 커스텀 자료형 또한 포함됩니다. 먼저 기본 자료형에 대해 간단하게 알아보겠습니다. 기본 자료형 기본 자료형에는 8가지가 존재합니다. 참, 거짓을 저장하는 boolean 실수를 저장하는 flo..

Backend

@SpringBootTest vs. @WebMvcTest

프로젝트를 진행하면서 API 문서화를 위해 Spring Rest Docs를 사용해보게 되었습니다. 이전까지는 테스트 코드를 작성하지 않았던 아쉬움이 있어 테스트 코드 작성을 강제화하기 위해 사용경험이 있던 Swagger UI가 아닌 이를 선택했습니다. 그러면서 작성한 테스트 코드에서 @SpringBootTest이 아닌 @WebMvcTest라는 어노테이션을 사용하게 되었는데, 이 둘은 어떤 차이가 있는지 정리하는 시간을 가져보고자 합니다. (사실 이 차이를 몰라서 에러때문에 끙끙 댔습니다.) 하나하나씩 알아보고 정리해보겠습니다. @SpringBootTest 먼저, 위 어노테이션은 Spring boot를 기반으로 한 테스트를 동작하는 클래스에서 사용될 수 있습니다. 제공하는 기능에 대해 알아보기 전에, 자주..

알고리즘풀이

조합과 중복조합

저번 포스트에 이어 이번에는 조합과 중복조합에 대해 정리하고자 합니다. 조합 먼저 조합입니다. 조합은 "N개의 숫자 중에서 R개의 숫자를 순서 없이 뽑는 것"을 말합니다. 예를 들어 1, 2, 3 이라는 숫자가 있을 경우, 여기 2개의 숫자를 순서 없이 뽑으면 {1, 2}, {1, 3}, {2, 3} 을 얻을 수 있습니다. 순열이었다면 {2, 1}, {3, 1}, {3, 2} 등을 얻을 수 있었지만, 조합은 순열과 달리 순서 없이 뽑기 때문에 제외합니다. 그렇다면 이제 이를 구현해보기 위해 필요한 것들을 생각해보면, 조합을 구하고자 하는 데이터(숫자)와, 조합에 현재 숫자가 뽑혔는지를 알아야 합니다. 그리고 이를 구현하는 방법은 2가지가 있습니다. 백트래킹을 이용하거나, 재귀 호출을 이용할 수 있습니다...

알고리즘풀이

순열과 중복순열

알고리즘 문제를 풀면서, 매번 순열과 조합에 관한 문제가 나오면 헉!하고... 제대로 구현해보지 못한 것 같아, 이번 기회에 코드를 정리하고자 합니다. 순열 먼저 순열(permutation)입니다. 순열의 정의는 "서로 다른 N개에서 R개를 뽑아서 나열한 것"입니다. 또한 이로 인해 모든 순열의 시간복잡도는 O(n!)입니다. 그렇다면 순서가 상관있을까요? 맞습니다. 순서가 상관있습니다. 이 말의 의미는 다음과 같습니다. 숫자가 0, 1, 2로 총 3개가 있고, 이 중 2개를 뽑는 순열을 생각해봅시다. 순열은 순서가 상관있기 때문에, 즉 순서를 고려하기에, 같은 숫자를 뽑더라도 순서가 다르다면 다른 것입니다. 그렇다면 다음과 같은 순열을 얻을 수 있을 것입니다. {0, 1}, {0, 2}, {1, 0}, ..

알고리즘풀이

[카카오 기출] 2019 카카오 개발자 겨울 인턴십 문제 풀이

하반기 코딩테스트가 곧 몰아칩니다.. 스스로 해결한 문제도 있고, 그렇지 못한 문제도 있지만 모두가 이해할 수 있게끔 풀이하면서 복기할 목적으로 문제 풀이를 해보려 합니다. 레벨 순으로 가면서 풀었던 코드를 분석해보겠습니다. 1. 크레인 인형뽑기 게임 (Level 1) https://school.programmers.co.kr/learn/courses/30/lessons/64061 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.*; class Solution { // 인형 담을 바구니 Stack basket = new Sta..

Java지식

Overloading과 Overriding

이번 시간에는 헷갈리기 쉬운 개념인 Overloading과 Overriding에 대해서 정리해보고자 합니다. Overloading 메소드 이름은 같지만, 파라미터 수, 타입은 다른 메소드를 중복으로 선언하는 것을 말합니다. 이러한 Overloading은 다음과 같은 특징을 가집니다. 메소드 이름이 같아야 합니다. 반환형은 같아도 되고, 달라도 됩니다. 파라미터 개수가 달라야 합니다. 파라미터 개수가 같은 경우, 각 데이터 타입이 달라야 합니다. public class OverloadingTest { void test() { System.out.println("매개변수가 없는 test()"); } void test(int a, int b) { System.out.println("매개변수 " + a + "와..

Java지식

절차적 프로그래밍과 객체 지향 프로그래밍

자바를 공부하는 예비 개발자로서 객체 지향 프로그래밍이 뭔지정도는 알고 있어야 하니까 한 번 정리를 해보려고 합니다.. 객체 지향과 함께 자주 등장하는 절차적 프로그래밍도 함께 다뤄보고요. 들어가기 전, 객체란 무엇이고, 절차란 무엇인지를 먼저 알아야겠습니다. 객체는 실제 세계를 모델링한 것이라고 표현합니다. 모델링된 어떤 주체를 객체라고 할 수 있습니다. 프로젝트를 하든, 알고리즘 문제를 풀든, 항상 어떤 일을 하는 주체가 있어야 할 것입니다. 이해를 돕기 위해, 제가 읽었던 책에(객체지향의 사실과 오해 - 조영호)서 다룬 예를 인용하면, "우리가 손님이 되어 카페에 갑니다. 사계절 내내 아이스 아메리카노밖에 못 먹는 저는 캐셔에게 아아 한 잔을 주문합니다. 이곳 카페는 상당히 규모가 커서, 캐셔는 주..

codingjavaman
'java' 태그의 글 목록