본문 바로가기
반응형

Develop/Java70

[Java] 인터페이스를 사용하자! 자바는 다중 구현을 위해 인터페이스, 추상 클래스 기능을 제공한다. 그러면 어느 것을 사용하는게 더 좋을지 한번 고민해보자! 🤗 인터페이스의 장점 ❗ 자유로운 추가 자바는 단일 상속이 조건이다. 이러한 관점에서 추상 클래스 방식은 새로운 타입을 정의하는 데 커다란 제약이다. 예를 들어 개발 도구는 컴퓨터, 안드로이드 개발자에게는 삼성폰, IOS 개발자에게는 아이폰 등으로 나눌 수 있다. 그렇다면 'Computer ⊂ DevelopmentTool'로 표현할 수 있다. 이번에는 게임기를 생각해보자. 게임기에는 컴퓨터, 스위치, 닌텐도, 플스 등등 여러가지가 있다. 그렇다면 'Computer ⊂ GameMachine'로 볼 수도 있겠다. 그런데 위에서 말했다시피 자바는 단일 상속이 조건이라 아래와 같은 표현이.. 2022. 3. 18.
[Java] Inheritance(상속) vs Composition(조합) 목차 상속; Inheritance 조합; Composition 질문 사항 상속보다는 컴포지션을 써야한다? 상속 설계 시 hook을 주의하자. 상속용 클래스의 생성자에서 재정의 가능한 메서드 호출 금지 Cloneable과 Serializable 인터페이스를 조심해라? 상속을 금지하는 방법 도우미 메소드 활용하기 ✨ 상속; Inheritance 먼저 상속에 대해서 알아보겠다. 상속은 코드 재사용을 쉽게 해주지만 잘못 사용하면 오류나기 쉽상이다. 또한 메소드 호출과 달리 캡슐화를 깨뜨린다. 상위 클래스의 변경이 하위 클래스까지 영향을 줄 수 있기 때문이다. 상속용 클래스는 재정의 가능한 메소드들을 내부적으로 어떻게 이용하는지, 어떠한 상황에서 호출할 수 있는지 등을 문서로 남겨야 한다. 🔻 API 문서에 대해.. 2022. 3. 14.
[Java] 중첩 클래스의 종류 (feat. 멤버 클래스는 static으로!) 😏 서론 지난 번 클래스와 멤버의 접근 권한을 최소화해야 하는 이유에 대해 공부해보았다. 한 클래스에서만 사용하는 클래스는 private static으로 중첩시키라는 말이 있었는데 이 이유에 대해 자세히 알아보자. ❓ 중첩 클래스란? : 다른 클래스 안에 정의된 클래스 자신을 감싼 바깥 클래스에서만 사용되어야 함 (그 외 쓰임새가 생기면 톱 레벨 클래스로 생성) 컴파일 시 바깥클래스$중첩클래스.class 형태로 컴파일 됨 public class Animal { // 바깥 클래스, 가장 바깥에 있으므로 톱 레벨 클래스 // ... public class Kinds { // 중첩 클래스 // ... } } 📚 중첩 클래스의 종류 정적 멤버 클래스 비정적 멤버 클래스 익명 클래스 지역 클래스 정적 멤버 클래스.. 2022. 3. 14.
[Java] 접근 권한을 최소화해야 하는 이유 이 포스팅에 들어가기 앞서 잘 설계된 컴포넌트란 무엇인가?에 대해서 생각해보도록 하자. 우리가 컴포넌트를 설계할 때 중요한 것이 뭘까? 어떤 컴포넌트를 잘 설계되었다고 표현할까? ✨ 잘 설계된 컴포넌트 클래스 내부 데이터와 구현 정보를 외부로부터 잘 숨긴 컴포넌트 서로의 내부 동작 방식을 모른채 API를 통해 다른 컴포넌트와 소통 👉 결국은 정보 은닉, 캡슐화가 중요한 포인트라고 볼 수 있다. 🔻 정보 은닉이란? 더보기 : 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통해 접근을 허용하는 것 정보 은닉으로 인한 장점 여러 컴포넌트를 병렬로 개발 가능 👉 시스템 개발 속도↑ 각 컴포넌트를 더 빨리 파악할 수 있고 교체 부담도 적음 👉 시스템 관리 비용 ↓ 성능 최적화에 도움 소프트웨어의 재사용성 ↑.. 2022. 3. 6.
[Java] Predicate란? 🤔 서론 우테코 오늘자 강의에서 BiPredicate라는 개념을 처음 들어보았다. Predicate란 무엇인지, 언제 사용하는 것인지 그리고 내 코드에 적용하는 과정까지를 담아본다. 생각보다 어렵지 않다. 설명 안읽고 예제 코드만 봐도 바로 이해할 수 있을듯 📚 Predicate란? argument를 받아 boolean 값을 반환하는 함수형 인터페이스 functional method: test() 🔻 함수형 인터페이스란? 더보기 = SAM interface; Single Abstract Method Interface : 1개의 추상 메소드를 갖고 있는 인터페이스 ➕ default나 static 메소드의 제한 X @FunctionalInterface 어노테이션 사용 ➕ 없어도 동작하지만 함수형 인터페이스 .. 2022. 3. 4.
[JUnit5] 중복되는 테스트 코드 줄이기 목차 서론 @ParameterizedTest란? 예제 코드 -@ValueSource 파라미터를 여러개 받고 싶다면? - @CsvSource 사용자 정의 클래스를 파라미터로 넣고 싶다면? - @MethodSource 테스트 코드에 설명 덧붙이기 👀 서론 테스트 코드를 작성하다 보면 코드가 반복되는게 느껴질 때가 있다. 개인적으로 나는 객체가 잘 생성되는지 확인할 때도 경계값 중간값까지 최소 3번은 테스트하는 편이다. 값이 바뀔때마다 코드를 복붙하는게 불필요하게 느껴져서 테스트 코드 내부에 메소드를 따로 만들기도 했었는데... 우테코를 통해 @ParameterizedTest라는 어노테이션을 알게 되었다. 💡 @ParameterizedTest란? 다양한 인수로 테스트를 여러번 실행할 수 있도록 해주는 어노테이.. 2022. 3. 2.
[Java] 인스턴스화 방지를 위해 private 생성자 이용하기 정적 메소드, 정적 필드만 담은 클래스는 때때로 유용하게 쓰일 수 있다. 사용하는 경우가 크게 세 가지가 있는데 예제를 통해 살펴보자. 📕 1. 기본 타입 값이나 배열 관련 메소드를 모은 클래스 ex: java.lang.Math, java.util.Arrays java.util.Arrays의 코드를 살펴보면 아래와 같다. public class Arrays { public static boolean isArray(Object o) { ...} public static Object[] asObjectArray(Object array) { ...} public static List asList(Object array) { ...} public static boolean isNullOrEmpty(T[] arr.. 2022. 2. 26.
[Java] EnumMap이란? 😏 개요 먼저 Enum에 대해 잘 모르면 아래 글을 먼저 읽어보길 바란다. https://yeonyeon.tistory.com/171 [Java] Enum에 대해 목차 1. Enum이란? 2. 사용 방법 3. 주요 메소드 4. Singleton과 Enum 1. Enum이란? 🤔 enumerance type = 열거형 JDK 1.5부터 생겨난 기능으로 열거체를 정의할 수 있는 클래스 비교 시 실제 값 뿐만 아니라.. yeonyeon.tistory.com Map을 선언했는데 구현체로 뭘 사용할지 고민이 들었다. 검색 중에 EnumMap이라는게 있길래 정리해본다. 🤩 EnumMap이란? Enum 타입만 key로 사용 가능한 특별한 Map Array를 이용하기 때문에 성능적으로 우수 해싱 과정이 필요 없어 Ha.. 2022. 2. 25.
[Java] ConcurrentModificationException 에러 ❗ java.util.ConcurrentModificationException 👉 객체를 동시에 수정하는 것이 불가능한데 동시 수정이 일어나는 경우를 감지 위 오류가 발생한 상황은 아래와 같다. public class Random { private static final List randomNumbers = new ArrayList(); static { for (int i = 1; i 2022. 2. 24.
반응형