알고리즘에서도 그렇고 개발에서도 그렇고 Map은 정말 많이 쓰인다. 자바에서 Map를 사용하는 이유가 뭘까? 아주 간단히 알아보자. (Key, Value) 형태의 데이터를 저장 및 관리 다들 알듯이 Map은 Key와 Value를 매핑하는 자료구조이다. key를 사용해서 빠르게 값을 조회할 수 있고(O(1) 시간복잡도) 특정 데이터를 고유한 키 값으로 관리할 수 있다. 사용자의 ID를 나이와 매핑해보자. Map(String, Integer) userAges = new HashMap();userAges.put("Sungmin", 25);userAges.put("Insun", 25);System.out.println(userAges.get("Insun")); // 출력: 25 (Key, Value..
Language/Java
메서드 오버로딩을 하다보면 여러 매개변수를 받는 생성자나 메서드를 여러 개 작성하다 보니 매개변수의 순서나 타입에 의한 혼동이 생길 수 있다. 많은 매개변수를 갖는 생성자를 사용하면 코드의 가독성도 떨어지고 잘못된 타입을 넣었을 때 오류를 발생할 수도 있다. public class Car { private String model; private String color; private int year; public Car(String model) { this.model = model; } public Car(String model, String color) { this.model = model; this.color = color; ..
좀 쉬운 주제긴 하지만 스프링 부트를 공부하다보니 toString이 많이 나와서 이 참에 포스팅하겠다. 스프링 부트 공부하면서 자바까지 같이 익숙해지니 일석이조인 기분이다. toString 메서드는 자바 객체를 사람이 읽기 쉬운 문자열로 변환하기 위해 존재한다. 자바의 모든 클래스는 최상위 클래스인 java.lang.Object를 상속받는다. 따라서 모든 객체는 기본적으로 toString 메서드를 가지게 된다. toString 메서드는 객체의 자기소개라고 생각하면 된다. 기본 toString의 동작을 보면 " 안녕하세요. 저는 Object@1b6d3586입니다." 이렇게 소개하는 것과 마찬가지이다. 사람이 "저는 ID: 12345 입니다." 라고 소개하는 것과 비슷하다. 정보는 있는데 직관적으..
예외 처리의 종류는 다양하다. 실제 개발에선 여러 가지 예외를 동시에 처리해야 하는 경우가 많은데 여러 예제를 통해 각종 예외에 대한 코드를 연습해보겠다. 파일 읽기 및 데이터 변환 파일을 읽고 내용이 숫자라면 숫자를 처리하는 프로그램을 짜보자. 파일이 없을 경우 FileNotFoundException이 발생하고 파일 내용이 숫자가 아닐 경우엔 NumberFormatException이 발생할 것이다. import java.io.*;import java.util.*;public class MultipleExceptionHandlingExample { public static void main(String[] args) { File file = new File("numbers.txt")..
다형성은 객체 지향 프로그래밍의 4대 핵심 원칙 중 하나이다. 여러 형태를 가질 수 있는 능력을 의미하는데, 다형성은 같은 이름의 메서드나 속성이 클래스에 따라 다르게 동작하도록 하여 유연하고 확장 가능한 코드를 작성할 수 있게 한다. 이번 글에선 다형성의 개념과 본질을 살펴보고 자바 코드 예제를 통해 실제로 어떻게 활용할 수 있는지 간단하게 설명하는시간을 가져보겠다. 다형성이란? 다형성은 크게 두 가지로 구분되는데, 1. 컴파일 시간 다형성 (정적 바인딩) : 메서드 오버로딩처럼 컴파일 시점에 호출될 메서드를 결정하는 방식이다. 2. 런타임 다형성(동적 바인딩) : 메서드 오버라이딩처럼 실행 시점에 호출될 메서드를 결정하는 방식이다. 이번 글에서는 런타임 다형성을 중점적으로 다룰 것이다. 런타임 ..
오랜만에 자바 포스팅으로 돌아왔다. 오늘은 문자열을 처리하는데 사용되는 String, StringBuffer, StringBuilder의 동작 방식, 성능, 사용 목적을 비교하며 각각의 클래스가 어떻게 동작하고 언제 사용하며 성능이 어떻게 다른지 설명하겠다. String 불변 객체String 객체는 한 번 생성되면 더 이상 변경할 수 없다.예를 들어 String 객체에서 문자열을 변경하는 작업이 발생하면 실제로는 새로운 String 객체가 생성되는 것이고 기존 객체는 가비지 컬렉터가 처리할 때까지 메모리 상에 남아 있다. 불변성의 장점String 객체는 불변성 덕분에 안전하게 여러 쓰레드에서 공유될 수 있다.String은 Java의 String Pool(메모리 사용 최적화하는 공간)에 의해..

오늘도 조금 쉬운 개념으로 돌아왔다 자바의 인터페이스는 메서드 선언의 집합만을 포함하며, 구현이 없는 추상적인 형식을 정의한다. 클래스가 인터페이스를 구현하면, 해당 인터페이스의 모든 메서드를 반드시 구현해야 한다. 이 부분은 뒤에서 다시 설명하겠다. 인터페이스는 코드의 유연성과 확장성을 높이며, 다중 상속을 지원하지 않는 자바에서 다른 클래스와 기능을 공유하는 중요한 방법이다. 자바의 인터페이스는 일종의 계약서나 청사진으로 비유할 수 있다.이 비유를 통해서 인터페이스의 개념과 역할을 쉽게 이해해보자. 계약서로 비유를 들어보았다. 생각해보자. 나는 한 건설 회사의 사장이다. 나는 여러 다른 하청업체와 계약을 맺고 건물을 짓고 싶다. 각 하청업체는 건물의 특정 부분을 담당해야 한다. 전기, 배관, ..
아직 메서드 개념도 포스팅 하지 않았는데 멤버 변수 초기화에 관련하여 먼저 포스팅을 하게 됐다. 복습하면서 재밌는 비유를 찾아냈기에 먼저 설명하겠다. 자바 생성자에서 this.x = x;와 같은 코드를 "멤버 변수 초기화" 또는 "필드 초기화"라고 부른다. 이 과정은 보통 생성자의 매개변수로 전달된 값을 객체의 멤버 변수에 할당하여 초기화하는 것을 의미한다. 예시 코드를 보자public class MyClass { private String s; public MyClass(String s) { this.s = s; }} this.s = s;는 생성자의 매개변수 s를 객체의 멤버 변수 s에 할당하는 과정이다.this 키워드는 현재 객체 자신을 참조하며, 이를 통해 멤버 ..