자바의 동적 바인딩(Dynamic Binding)과 정적 바인딩(Static Binding)
·
Java/정리
A a = new B();Animal animal = new Dog(); "변수 타입은 Animal인데 왜 Dog의 메서드가 실행되지?" 이 질문의 답이 바로 동적 바인딩(Dynamic Binding)이다. 이번 포스트에서는 바인딩이 무엇인지부터 동적 바인딩과 정적 바인딩의 차이, 그리고 JVM 내부에서 어떤 일이 일어나는지까지 자세히 알아보자.바인딩(Binding)이란?바인딩(Binding)은 메서드 호출과 실제 실행될 메서드를 연결하는 과정을 의미한다.dog.sound();sound()를 호출했다. ▼어떤 클래스의 sound()를 실행해야 하지? ▼실제 실행할 메서드를 결정바인딩은 언제 일어날까?2가지가 존재실행(런타임) 시점실행 시점 (런타임) - 동적 바인딩컴파일 시점 -..
StringTokenizer의 사용
·
Java/정리
오라클 공식문서https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/util/StringTokenizer.htmlStringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.StringTokenizer는 호환성(Compatibility)을 위해 남아있는 Legac..
Java 문자열 입력 처리 - Scanner와 BufferedReader
·
Java/정리
입력받는 방식Java에서 콘솔 입력을 받을 때 가장 많이 사용하는 클래스는 두 가지가 있다. 대부분 Scanner를 사용하지만, 코딩 테스트나 대용량 데이터를 처리할 때는 대부분 BufferedReader를 사용한다. 이번 글에서는 두 클래스가 만들어진 이유부터 내부 동작 방식, 성능 차이까지 정리해보려고 한다.ScannerScanner sc = new Scanner(System.in);String name = sc.nextLine();int age = sc.nextInt();nextInt()nextDouble()next()nextLine()굉장히 직관적이다. 입력받고 싶은 타입 그대로 메서드가 존재한다. 덕분에 초보자가 배우기 매우 쉽다. Scanner는 사용하기 편하도록 만들어진 입력 도구이다.Inp..
프로그래머스 - 폰켓몬
·
Java/코테
문제 이해하기전체 폰켓몬 중에서 N/2 마리만 선택할 수 있다.이때 중요한 점은 가능한 한 서로 다른 종류의 폰켓몬을 선택하는 것이다.먼저 폰켓몬 번호 배열에서 중복을 제거해 서로 다른 폰켓몬의 종류 수를 구한다.1. 만약 중복 제거 후의 종류 수가 N/2보다 작다면, 선택 가능한 모든 종류를 가져갈 수 있으므로 그 값이 정답이다.2. 반대로 중복 제거 후의 종류 수가 N/2보다 크거나 같다면, 최대 N/2마리까지만 선택할 수 있으므로 N/2가 정답이다. 3. 결국 정답은 중복 제거된 폰켓몬 종류 수와 N/2 중 더 작은 값이다.문제 적용하기import java.util.*;class Solution { public int solution(int[] nums) { int max = nu..
자바에서 int[] ↔ List<Integer> 변환 (for문은 이제 그만...)
·
Java/정리
느꼈던 불편함에 대하여코딩을 하다 보면 배열을 동적으로 관리해야 하는 상황이 자주 생긴다. 처음에는 배열을 다루기 위해 for문을 반복해서 돌리며 값을 옮기거나 추가하는 방식을 사용했다. 하지만 이런 방식은 코드가 길어지고 유지보수도 쉽지 않았다. 그러던 중, 배열을 List로 변환한 뒤 관리하는 것이 훨씬 유연하다는 걸 깨달았다. 특히 람다식(Stream)을 활용하면 반복문 없이도 가독성 좋은 코드로 깔끔하게 변환할 수 있어 큰 도움이 되었다.int[] -> List 변환 import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public class Main { public static void main(St..
오름차순 정렬과 내림차순 정렬에 대해 알아보자
·
Java/정리
시작정렬은 코딩테스트에서도, 실제 프로젝트에서도 가장 자주 쓰이는 기능이다. 이렇게 자주 사용되지만, 자바에서는 배열과 리스트의 정렬 방식이 서로 달라서 헷갈리기 쉽다. 그래서 이번 글에서는 이 부분을 한 번에 정리해보려고 한다. 특히 아래 네 가지 타입은 정렬 방법이 각각 미묘하게 다르므로, 글을 읽기 전에 머릿속에 한 번 떠올려두면 이해가 더 잘 될 것이다.int[]Integer[]ListListint[] 오름차순 정렬import java.util.Arrays;public class Main { public static void main(String[] args) { int[] arr = {1, 6, 5, 3, 2}; Arrays.sort(arr); Syst..
ArrayList가 처음이라면 꼭 알아야 할 핵심 기능
·
Java/정리
ArrayList가 무엇인가?ArrayList는 내부적으로 "동적 배열"을 사용해 데이터를 순차적으로 저장하고 관리하는 컬렉션 클래스이다.연속적인 데이터 리스트이다.크기가 고정되어 있는 배열과 달리 데이터가 담긴 크기에 따라서 가변적으로 공간을 늘리거나 줄인다.데이터 중간에 삽입 또는 삭제를 할 경우, 데이터의 빈 공간을 만들지 않기 위해서 데이터의 요소들을 이동시키기 때문에 삽입 또는 삭제에 있어서는 속도가 느리다.코드로 확인하기import java.util.ArrayList;import java.util.List;public class Main { public static void main(String[] args) { List list = new ArrayList(); ..
새벽 코딩하다가 알게 된 String.repeat() - 반복문 대신 이렇게 쓰자!
·
Java/정리
언제 사용되는 메서드인가?String.repeat(int count) 는 자바 11에서 추가된 메서드로, 문자열을 원하는 횟수만큼 반복해 새로운 문자열을 만들어준다.파라미터를 0으로 지정하면, 빈 문자열을 반환파라미터가 음수라면 IllegalArgumentExceptionthrow public class Main { public static void main(String[] args) { String str = "hello"; String result = str.repeat(3); System.out.println(result); }}기존의 코드는? - (for문 코드)public class Main { public static void main(S..