Language/Java

자바 8부터 도입된 람다식은 코드의 간결성과 가독성을 크게 향상시켜주는 새로운 문법이다. 기존엔 단일 메서드를 구현하기 위해 익명 클래스를 자주 사용했지만 이 경우에 코드가 장황해지고 복잡해질 수 있었다. Oracle 공식 문서 튜토리얼에 따르면 추상 메서드가 하나뿐인 익명 클래스의 구현은 문법이 번거롭고 명확하지 않을 수 있다며 동작을 메서드 인자로 전달하기 위해 람다식을 도입했다고 설명한다. 람다식의 필요성 람다식 도입 전엔 이벤트 처리나 컬렉션 정렬 등에서 주로 익명 클래스가 사용됐다. 하지만 하나의 인터페이스에 추상 메서드가 단 하나일 때조차 익명 클래스를 작성해야 하므로 코드가 길어지고 복잡해질 수 있다. 자바스크립트, 스칼라 등 다른 언어에서 사용되던 함수형 프로그래밍 기법이 인기를 끌면..
오늘은 제네릭에 대해 알아보려고 한다. 코딩을 하다 보면 비슷한 기능을 여러 데이터 타입에 대해 반복해서 작성해야 하거나 의도치 않은 타입 오류 때문에 짜증이 난다. 이런 면에서 타입 안정성을 보장해주는 제네릭은 정말 많은 도움이 된다. 들어가기 전에 간단히 정의하자면 제네릭은 클래스나 메서드 내부에서 사용될 데이터 타입을 미리 정하지 않고, 객체를 생성하거나 호출할 때 그 타입을 결정하도록 하는 기능이다. -> 즉, 데이터 타입을 일반화(generic)하는 것이다. 제네릭을 보면 나 를 마주치게 된다. List list = new ArrayList(); 괄호도 아니고 꺽쇠를 이용하는데, 이 요상한 문법에 대해 알아보자. 제네릭의 편리함 List list = new ArrayList();list..
알고리즘에서도 그렇고 개발에서도 그렇고 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..
메서드 오버로딩을 하다보면 여러 매개변수를 받는 생성자나 메서드를 여러 개 작성하다 보니 매개변수의 순서나 타입에 의한 혼동이 생길 수 있다. 많은 매개변수를 갖는 생성자를 사용하면 코드의 가독성도 떨어지고 잘못된 타입을 넣었을 때 오류를 발생할 수도 있다.  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(메모리 사용 최적화하는 공간)에 의해..
hskhsmm
'Language/Java' 카테고리의 글 목록