자바(35)
-
자바의 문자열
자바의 문자열 String 생성 방법 일반적으로 리터럴로 String을 생성하거나 new 키워드로 객체를 생성하거나 intern()을 사용하는 방식이 있다. final String a = "a"; final String b = new String("a"); final String c = new String("a").intern(); 리터럴을 사용해 String 객체를 생성하는 경우에는 새로운 String 객체를 생성하지 않는다. 반면에 new String을 하게 되면 새로운 객체를 만들게 된다. 따라서 다음의 결과가 발생한다. System.out.println(a == b); // false 하지만 intern()을 사용하는 경우에는 String pool에 값이 없다면 이를 생성하고, 그 값을 가리키는 ..
2023.03.05 -
아이템 15, 클래스와 멤버의 접근 권한을 최소화하라
아이템 15, 클래스와 멤버의 접근 권한을 최소화하라 정보 은닉은 각 컴포넌트가 외부에 의존하지 않고 독자적으로 동작할 수 있다는 점 때문에 다음과 같은 장점을 가지고 있다. 소프트웨어 재사용성을 높인다. 독립적인 컴포넌트는 다른 환경에서도 사용이 가능하다. 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬적으로 개발 가능하기 문이다. 시스템 관리 비용을 낮춘다. 디버깅과 컴포넌트 교체 부담이 적기 때문이다. 성능 최적화에 도움을 준다. 병목 현상이 발생하는 컴포넌트를 정해 다른 컴포넌트에 영향을 주지 않고 최적화할 수 있기 때문이다. 큰 시스템 제작 난이도를 낮춰준다. 개별 컴포넌트에 대한 단위 테스트를 해가며 큰 시스템을 개발할 수 있기 때문이다. 자바에서의 정보 은닉 자바에서는 정보 은닉을 위해 다..
2023.03.02 -
자바, 객체야~ 일해라!
우아한테크코스의 프리코스부터 레벨 1을 진행하는 지금까지 배운 것 중에 가장 인상 깊은 내용이 무엇인가?하고 물어보면 나는 곧바로 “객체가 일하도록 해라!”라는 내용을 말할 것이다. ‘객체는 객체스럽게 사용한다.’ 우아한테크코스 프리코스 기간 중에 받았던 피드백 중에는 다음과 같은 내용이 있었다. 이는 무분별한 getter 사용을 자제하고 객체가 스스로 일하게끔 하라는 의미였다. 이를테면 다음과 같은 코드가 있다고 가정해보자. (Line 클래스는 생략…) 사다리 게임을 진행하는 코드의 예시이다. 플레이어는 위치에 대한 정보를 가지고 있고, 플레이어의 위치를 line에 전달했을 때 사다리가 어디로 연결되어있는지 확인할 수 있는 코드이다. Player는 getter와 setter를 통해 플레이어의 현재 위치..
2023.02.27 -
이펙티브 자바, 의존 객체 추입
아이템 05 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (1) 유연하지 않고, 테스트하기 어려운 클래스 정적 유틸리티를 잘못 사용한 예시 public class RacingGame { private static final List cars; private static final NumberGenerator numberGenerator = new RandomNumberGenerator(); private RacingGame() { // 객체 생성 방지} // ... 생략 private static void start() { cars.stream() .filter(car -> car.canMove(**numberGenerator.generate()**)) .forEach(Car::move); ..
2023.02.26 -
자바 디자인패턴(1), 전략 패턴(Strategy pattern)
전략 패턴(Strategy pattern) 여러 알고리즘을 하나의 추상적인 접근점(인터페이스)을 만들어서 접근점에서 서로 교환 가능하게 만든다. 클라이언트는 전략을 소유하고 있다. 전략은 각각 A, B, C가 있고, Strategy는 인터페이스로 구현한다. 클라이언트는 Strategy를 직접 호출해 StrategyA, StrategyB, StrategyC를 모두 사용할 수 있다. 요구 사항 신작 게임에서 캐릭터와 무기를 구현해보기 - 무기는 '칼', '검' 두 종류가 있다. => 칼과 검은 각각 알고리즘의 대상이되어 무기는 하나의 인터페이스로 존재할 수 있다. 따라서 이는 전략패턴으로 구현할 수 있다. 무기 인터페이스 선언 // Weapon.java public interface Weapon { publ..
2022.09.30 -
자바, 싱글톤 패턴 실습
싱글톤 패턴은 디자인 패턴 중 하나로, 인스턴스가 하나만 존재해야하는 경우에 대한 클래스 템플릿을 의미한다. 현재 자바를 두권의 책(가장 빨리 만나는 코어 자바9, Do it! 자바 프로그래밍 입문)으로 학습 중이다. 이 중 Do it! 자바 프로그래밍 입문에서 나온 예제를 가지고 싱글톤 패턴 실습을 진행하고자 한다. 회사 클래스 어떤 회사의 직원들을 객체 지향 프로그램으로 구현한다고 가정할 때 직원은 여러명이겠지만 회사는 하나이다. 이러한 경우에 회사는 싱글톤 패턴으로 구현할 수 있다. 이때 싱글톤 패턴은 생성자와 인스턴스를 private으로 구현하고, public 메서드를 통해 외부에 인스턴스를 반환하는 형식으로 구현된다. // Company.java package singleton; public c..
2022.09.03