본문 바로가기

Language9

[page.49 ~ 65] 다형성 오브젝트 49 ~ 65p Upcasting과 다형성 public class Movie { private DiscountPolicy discountpolicy; public Money calculateMovieFee(Screening screening) { return fee.minus(discountPolicy.calculateDiscountAmount(screening)); } } 위의 Movie 클래스는 영화 예매 비용을 계산하는 메서드에서 discountPolicy 객체에 "calculateDiscountAmount"라고 메세지를 보낸다. 그런데 일반적으로는 외부에서 discountPolicy 객체에 구현한 메서드를 사용할 때 메서드를 호출한다고 한다. "메세지를 보낸다"와 "메서드를 호출한다"는 .. 2022. 11. 10.
[page.37 ~ 49] 객체지향 설계 객체지향 설계를 할 때 어떤 클래스가 필요한지가 아니라 어떤 객체가 필요한지 먼저 고민해야 한다. 말 그대로 "객체"를 지향하는 것이다. 다양한 객체를 상상하고 공통된 데이터와 기능을 갖는 것끼리 묶어 클래스를 만든다. 도메인이란 프로그래밍으로 문제를 해결할 분야다. 그리고 클래스 구조는 도메인 구조(로직)과 유사한 형태를 띠어야 한다. 예를 들어 영화예매 프로그램에서 도메인은 영화 예매다. 그리고 아래와 같이 도메인 구조와 동일한 형태로 클래스를 구성할 수 있다. 도메인 구조 예매 → 상영 → 영화 → 할인 정책 → 할인 조건 할인 정책 → 금액 학인 & 비율 할인 할인 조건 → 순번 할인 & 기간 할인 클래스 구조 Reservation → Screening → Movie → DiscountPolicy.. 2022. 11. 10.
[page.7 ~ 36] 캡슐화 객체지향 프로그래밍에서 캡슐화란 데이터와 기능을 하나의 객체 내부에 모아두는 것이다. 예를 들어 영화 예매 클래스는 영화, 상영일자 데이터와 예약 메서드 등 영화 예매와 직접적으로 관련된 모든 데이터와 기능을 갖는다. 이렇게 함으로써 객체는 다른 클래스 등에 의존하지 않고 내부적으로 판단할 수 있다. 즉, 독립적인 객체를 만들 수 있다. 모든 소프트웨어의 모듈은 정상적으로 동작해야 하고, 쉽게 변경할 수 있어야 하고, 가독성이 좋아야 한다. 여기서 모듈은 클래스, 패키지, 라이브러리 등 프로그램을 구성하는 어떤 단위도 상관없다. 첫번째로 동작 가능성은 소프트웨어라면 기본적으로 갖추어야 하는 조건이기 때문에 넘어가도록 한다. 캡슐화의 이점은 변경이 용이하고 가독성이 좋아진다는 점이다. 특정 기능을 변경해야.. 2022. 11. 10.
우테코 2주차 JUnit5 Test 코드 해석 우테코 2주차 과제는 숫자 야구 게임을 만드는 것이다. 사실상 숫자 맞추기 게임인데, 게임 유저는 컴퓨터가 낸 문제(숫자 3자리)를 맞추면 끝나는 게임이다. 숫자가 얼마나 일치하느냐에 따라 "낫싱", "1볼 1스트라이크" 등으로 힌트를 줘 사용자가 정답 숫자를 유추하게끔 한다. 정답을 맞춘 경우에는 게임이 종료된다. 1을 입력하면 게임을 다시 시작할 수 있고, 2를 입력하면 프로그램을 완전히 종료한다. /* ApplicationTest.java */ class ApplicationTest extends NsTest { @Test void 게임종료_후_재시작() { assertRandomNumberInRangeTest( () -> { run("246", "135", "1", "597", "589", "2".. 2022. 11. 5.
점프 투 자바 3. 인터페이스 interface 인터페이스란 인터페이스는 본질적으로 클래스를 구현하는 약속이나 법칙이다. class Animal { String name; void setName(String name) { this.name = name; } } class Tiger extends Animal { } class Lion extends Animal { } class ZooKeeper { void feed(Tiger tiger) { System.out.println("feed apple"); } void feed(Lion lion) { System.out.println("feed banana"); } } public class Sample { public static void main(String[] args) { ZooKeeper zooK.. 2022. 11. 4.
점프 투 자바 2. 클래스 생성자 생성자 (Constructor) 생성자는 new 키워드를 사용해 객체를 생성할 때 호출하는 메서드다. 클래스명과 동일한 이름으로 메서드를 작성해 구현할 수 있다. 객체를 생성할 때마다 멤버 변수를 변경해야 하는 경우 생성자를 사용한다. public class Sample { int a; void Sample() {// 생성자 this.a++; } public static void main(String[] args) { Sample sample = new Sample(); sample.a = 1; sample.varTest(); System.out.println(sample.a); // 2 출력 } } 디폴트 생성자 디폴트 생성자는 아무 내용이 없는 생성자다. 생성자를 작성하지 않는 경우에는 컴파일러가 자.. 2022. 11. 4.