공부/자바 12

[자바] 상속보다는 조합 사용하기

출처 : https://tecoble.techcourse.co.kr/post/2020-05-18-inheritance-vs-composition/ 상속보다는 조합 사용하기 상속의 단점 : 캡슐화를 깨뜨린다. 상위 클래스의 구현이 하위 클래스에 의해 노출되는 상속은 캡슐화를 깨뜨린다. 캡슐화가 깨짐으로써 하위 클래스가 상위 클래스에 강하게 결합 및 의존하게 되고 이는 변화에 유연히 대처할 수 없다. 로또 번호를 갖는 클래스를 보자 public class Lotto { protected List lottoNumbers; public Lotto(List lottoNumbers) { this.lottoNumbers = new ArrayList(lottoNumbers); } public boolean contai..

공부/자바 2023.02.07

[자바] 인터페이스를 분리하여(전략패턴) 테스트하기 좋은 메서드로 만들기

출처: https://tecoble.techcourse.co.kr/post/2020-05-17-appropriate_method_for_test_by_interface/ 인터페이스를 분리하여 테스트하기 좋은 메서드로 만들기 … tecoble.techcourse.co.kr 인터페이스를 분리하여(전략패턴) 테스트하기 좋은 메서드로 만들기 전에 본 메서드 시그니처를 수정하여 테스트하기 좋은 메서드 만들기에서는 테스트하기 어려운 의존을 매개변수로 전달받아 테스트하였다. 이 방법은 의존 관계를 상위로 이동시키는 것에 불과하고, 응집도가 떨어지게 된다. 전략패턴을 활용하여 인터페이스 분리 후 테스트해보자. public class Car { private static final int MOVABLE_LOWER_BOU..

공부/자바 2023.02.02

[자바] 일급 컬렉션(First Class Collection)

출처 : https://tecoble.techcourse.co.kr/post/2020-05-08-First-Class-Collection ㅇ일급 컬렉션(First Class Collection) Collection을 wrapping하면서 Collection외 다른 멤버변수가 없는 것을 의미한다. Collection을 Wrapping한다는 것은 다음과 같다 public class Person { private String name; private List cars; // ... } public class Car { private String name; private String oil; // ... } 출처: 위 코드를 아래처럼 바꾼다. public class Person { private String n..

공부/자바 2023.01.17

[자바] 디미터의 법칙, getter를 잘 쓰기

ㅇ 디미터의 법칙(Law of Demeter) 디미터의 법칙은 Demeter라는 프로젝트를 진행하던 개발자들이 어떤 객체가 다른 객체에 대해 지나치게 많이 알기 때문에 결합도가 높고 좋지 못한 설계를 야기한다는 것을 발견하였다. 이를 개선하고자 객체에 자료(상태값)은 숨기고 함수를 공개한다. 이것이 디미터의 법칙이다. 즉, 다른 객체가 어떤 자료(상태값)을 갖고 있는지 몰라야 한다는 것이다. = don’t talk to strangers(낯선 이에게 말하지 마라) , principle of least knowledge(최소 지식 원칙)로 알려져있다. 또는 직관적으로 이해하기 위해 여러 개의 .(도트)를 사용하지 말라고도 알려져 있다. 디미터의 법칙을 준수하면 캡슐화를 높여 응집도를 높일 수 있다. ㅇ O..

공부/자바 2023.01.16

[자바] ConcurrentHashMap

ConcurrentHashMap HashTable클래스의 대부분 메서드는 synchronized 키워드가 존재하여 메서드가 임계구역으로 설정되어 있다. 이는 Thread-safe하지만 동시에 접근할 때 병목현상이 발생한다. HashMap클래스는 synchronized 키워드가 존재하지 않는다. 그렇기에 성능은 좋지만 multi-thread 환경에서는 사용할 수 없다. ConcurrentHashMap클래스는 Hashtable클래스의 단점을 보완하며 multi-thread환경에서 사용할 수 있도록 나온 클래스이다. ConcurrentHashMap클래스는 synchronized키워드가 메서드 전체에 적용되어 있지 않고, put메서드 중간 특정 부분에만 적용되어 있다. public V put(K key, V v..

공부/자바 2022.12.27

[java] 동기와 비동기, 그리고 블럭과 넌블럭

https://musma.github.io/2019/04/17/blocking-and-synchronous.html 동기와 비동기, 그리고 블럭과 넌블럭 무릇 모든 개발자들, 아니 비단 개발자가 아니라 할지라도 컴퓨터 관련 산업계 종사자들이라면 오다 가다 한 번씩은 꼭 들어보고, 또 익혔음직한 내용이겠습니다. 이름하야, 동기(Synchronous)와 비 musma.github.io https://wbluke.tistory.com/50 CompletableFuture 톺아보기 CompletableFuture 학습 테스트 안녕하세요! 이번 포스팅에서는 학습 테스트를 통해 CompletableFuture를 알아보는 시간을 가져보려고 합니다. 모든 코드는 GitHub에 있으니 참고하시면 됩니다. Completa..

공부/자바 2022.06.27

[자바] 자바의 정석 정리(내가 다시 볼 것들만)

자바의 정석 1. 자바를 시작하기 전에 ㅇ JVM : 자바 가상 머신. 다른 os에서도 같은 자바 프로그램 개발을 위함. wora ㅇ JRE = JVM + JAVA API ㅇ JDK = JRE + 개발에 필요한 실행파일 ㅇ Hello.java 작성 -> javac.exe컴파일러 -> Hello.class 생성 -> java.exe인터프리터 -> 실행 ㅇ public static void main(String[] args)는 main메서드의 선언부인데, 프로그램을 실행할 때 java.exe에 의해 호출될 수 있도록 미리 약속된 부분이므로 항상 똑같이 적어주어야 한다. ㅇ 모든 클래스가 main메서드를 가지고 있어야 하는 것은 아니지만, 하나의 java애플리케이션에는 main메서드를 포함한 클래스가 반드시 ..

공부/자바 2022.05.04

[java] garbage collection

1. Garbage Collection 프로그램을 개발 하다 보면 유효하지 않은 메모리인 가바지(Garbage)가 발생하게 된다. C언어에서는 free함수를 사용하여 개발자가 직접 메모리를 해제해야주어야 한다. 하지만 자바나 코틀린을 이용해 개발하면 JVM의 가비지 컬렉터(Garbage Collector, GC)가 불필요한 메모리를 알아서 정리해준다. 대신 자바에서 명시적으로 불필요한 데이터를 필요하기 위해 일반적으로 null로 선언한다. Person person = new Person(); person.setName("hong"); person = null; // 가비지 발생 person객체는 가비지가 된다. 자바나 코틀린에서는 이러한 메모리 누수를 방지하기 위해 GC가 주기적으로 검사하여 메모리를 청..

공부/자바 2022.02.03