Enum 클래스 Enum은 열거형으로 불리며 서로 연관된 집합을 의미한다. 자바의 Enum은 아래와 같은 장점을 가진다. 열거체를 비교할 때 실제 값 뿐 아니라 타입까지도 체크한다. 열거체의 상수값이 재정의 되더라도 다시 컴파일할 필요가 없다 인스턴스 생성과 상속을 방지하여 상수값의 타입 안정성이 보장된다 enum 키워드로 구현의도가 열거임을 확실히 알 수 있다. Enum의 사용 enum 키워드를 사용하여 열거체를 정의하고, Enum이름.상수이름 으로 사용할 수 있다. enum Color { RED, BLUE, GREEN } public class Main { public static void main(String[] args) { System.out.println(Color.RED); System.ou..
오늘은 동등성 비교와 동일성 비교가 무엇인지, 자바에서는 이러한 기능을 어떻게 제공하는 지에 대해서 작성해보도록 하겠습니다 객체 먼저 객체에 대한 이야기를 해야하 것 같습니다. OOP에서 객체는 프로그램의 기능을 담당하는 독립적인 존재이며, 메시지 교환을 통해 프로그램이 동작합니다. 객체를 구성하는 요소는 상태, 행동, 식별자입니다. 상태: 객체의 정보 집합 행동: 객체의 상태를 변화시키며, 상태에 의존적이다 식별자: 객체를 구분하는 상태 상태는 객체의 정보 집합입니다. 예를 들어, 사람의 경우 키와 몸무게 이름 등이 상태가 될 수 있습니다. 단순한 값만 상태가 될 수 있는 것은 아닙니다. 한 사람이 음료수를 가진다면, 음료수에 대한 정보도 객체의 상태 중 하나가 될 수 있습니다. 행동은 상태 값을 변화..
List를 조회하며 원하는 객체를 삭제할 때 볼 수 있는 예외입니다. 자바 도큐먼트의 설명을 발췌하면 아래와 같습니다. This exception may be thrown by methods that have detected concurrent modification of an object when such modification is not permissible. 한 객체에 대하여 동시 수정이 허가되지 않았음에도, 그러한 경우가 포착되면 발생하는 예외입니다. 이 문장만 보면 싱글 스레드 환경에서 발생하지 않는 예외라고 생각할 수 있지만, 더 읽어보면 아래와 같은 문장을 볼 수 있습니다. For example, if a thread modifies a collection directly while it ..
스트림이란? 스트림은 자바 8 API에 추가된 기능이다. 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 그리고 스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. // 기존 코드 List lowCaloricDishes = new ArrayList(); for (Dish dish : menu) { if (dish.getCalories() < 400) { lowCaloricDishes.add(dish); } } Collections.sort(lowCaloricDishes, new Comparator() { public int compare(Dish dish1, Dish dish2) { return dish1.getCalories().compareTo..
동작 파라미터화를 이용하면 더 유연하고 재상용할 수 있는 커드를 만들 수 있다. 그리고 익명 클래스를 사용하여 다양한 동작을 구현할 수 있지만 코드가 깔끔하지 않았다. 람다 표현식을 사용하면 좀 더 깔끔한 코드를 작성할 수 있다. 람다 표현식은 익명 클래스 처럼 이름 없는 함수면서 메서드를 인수로 전달할 수 있다. 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다. 람다의 특징은 아래와 같다. 익명: 보통 메서드와 달리 이름이 없다. 함수: 람다는 메서드 처럼 특정 클래스에 종속되지 않으므로 함수이다. 전달: 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성: 익명 클래스처럼 부가적인 코드가 필요없다. 사과의 무게를 기준으로 오름차순하는 코드를 익..
사용자의 요구사항은 계속 바뀐다. 따라서 우리는 기능을 수정하거나 새로운 기능을 추가해야하며, 여기에 드는 엔지니어링 비용이 최소화 되기를 원한다. 그뿐 아니라 새로 추가한 기능은 구현이 쉬워야 하고 장기적인 관점에서 유지보수가 쉬워야한다. 동작 파라미터화를 이용하면 이를 해결할 수 있다. 동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블력을 의미한다. 즉, 코드 블럭의 실행이 나중으로 미뤄지고 이러한 코드는 메서드의 인수로 전달될 수도 있다. 동작 파라미터화 덕분에 수행할 수 있는 주요 기능은 아래와 같다. - 리스트의 모든 요소에 대해서 '어떤 동작'을 수행할 수 있음 - 리스트 관련 작업을 끝낸 다음 '어떤 동작'을 수행할 수 있음 - 에러가 발생하면 '정해진 어떤 다른 동작'을..
역사의 흐름은 무엇인가? 멀티코어 CPU가 대중화 되는 등 하드웨어의 발전이 자바의 변화를 부추겼다. 자바 8이 등장하기 이전에는 유휴 코어를 사용하기 위해 스레드를 사용하려는 시도가 있었지만, 스레드를 사용하면 많은 관리상의 문제가 발생했다. 자바는 병령 실행 환경을 쉽게 관리하고 에러가 덜 발생할 수 있도록 진화하였다. 하지만 여러 개발자가 협업하여 프로그램을 만드는 이상 쉽지 않았다. 하지만 자바 8은 병렬 실행을 새롭고 단순한 방식으로 접근할 수 있는 방법을 제공한다. 이러한 방법은 이전과는 새로운 방법이기에 사용법을 익혀야한다. 그리고 자바 9에서는 리액티브 프로그래밍이라는 병렬 실행 기법을 지원한다. 리액티브 프로그래밍은 실행 환경이 한정적이지만, 고성능 시스템에서 인기를 얻고 있는 RxJav..
참고: https://leetcode.com/problems/longest-repeating-character-replacement/ Longest Repeating Character Replacement - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 참고: https://docs.python.org/3/library/stdtypes.html#range Built-in Types — Python 3.9.5 documentation The following s..