객체지향 프로그래밍 어떤 객체들이 필요할지 부터 고민하라 클래스의 윤곽을 잡기 위해서는 어떤 객체들이 어떤 상태와 행동을 가지는지를 먼저 결정해야함 객체를 기능을 구현하기 위해 협력하는 일원으로 봐야한다. 객체들의 모양과 윤곽이 잡히면 공통된 특성과 상태를 가진 객체들을 타입으로 분류하고 이 타입을 기반으로 클래스를 구현하라 클래스 구현하기 어떤 부분을 외부에 공개하고 어떤 부분을 감출지를 결정하는 것. 외부에서는 객체의 속성에 직접 접근할 수 없도록 막고 적절한 public 메서드를 통해서만 내부 상태를 변경할 수 있게 해야함 자율적인 객체 객체는 상태와 행동을 함께 가지는 복합적인 존재 데이터와 기능을 객체 내부로 함께 묶는 것 : 캡슐화 객체의 상태는 숨기고 행동만 외부에 공개해야 한다. 자신이 할..
개발서적
디자인 패턴은 객체 지향의 특성 중 상속, 인터페이스, 합성을 이용한다. 어댑터 패턴 호출 당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴이다. 기존의 ServiceA, ServiceB의 메서드를 같은 이름의 메서드로 호출해서 사용할 수 있게 해주는 변환기다. public class ServiceA { void runServiceA() { } } public class ServiceB { void runServiceB() { } } public class ClientWithNoAdapter { public static void main(String[] args) { ServiceA serviceA = new ServiceA(); ServiceB serviceB =..
객체 지향 프로그래밍 및 설계의 5원칙 : SOLID SRP (Single Responsibility Principle) : 단일 책임 원칙 OCP (Open Closed Principle) : 개방 폐쇄 원칙 LSP (Liskov Substitution Principle) : 리스코프 치환 원칙 ISP (Interface Segregation Principle) : 인터페이스 분리 원칙 DIP (Dependency Inversion Principle) : 의존 역전 원칙 SRP - 단일 책임 원칙 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다. class 강아지 { final static Boolean 수컷 = true; final static Boolean 암컷 = false; void ..

프로그래밍 동안 집중해야할것 1. 어떤 클래스가 필요한지를 고민하기 전에 어떤 객체들이 필요한지고민하라 클래스 : 공통적인 상태와 행동을 공유하는 객체들을 추상화한 것 따라서 클래스의 윤곽을 잡기 위해선, 어떤 겍체들이 어떤 상태와 행동을 가지는지 먼저 결정해야한다. 2. 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 보자 훌륭한 클래스를 설계하기 위한 핵심 : 어떤부분을 외부에 공개하고 어떤 부분을 감출지를 결정하는 것 private을 사용해서 외부에서는 객체의 속성에 직접 접근할 수 없도록 막고 적절한 public 메서드를 통해서만 내부 상태를 변경할 수 있게 해야한다. 자율적인 객체 1. 객체는 상태와 행동을 함께 가지는 복합적인 존재이다 2. 객체는 스스로 판단하고..

티켓 판매 어플리케이션 구현 초대장 Invitation class public class Invitation { private LocalDateTime when; //초대일자 } 티켓 Ticket class public class Ticket{ private Long fee; public Long getFree() { return fee; } } 가방 Bag class public class Bag { private Long amount; // 현금 private invitation invitation; private Ticket ticket; public Bag(long amount){ this(null, amount); } public Bag(Invitation invitation, long amou..
abstract 키워드 - 추상 메소드와 추상 클래스 추상메서드를 하나라도 갖고 있는 클래스는 반드시 추상 클래스로 선언해야한다. 물론 추상 메서드 없이도 추상 클래스를 선언할 수는 있다. 그럼 몸체가 없이 선언만 있는 메소드, 추상 메소드는 왜 필요할까? 상위 객체의 메서드를 호출하면 안되는 경우 추상메서드를 사용하게 된다. 추상클래스는 인스턴스, 즉 객체를 만들 수 없는 클래스가 된다. 개발시의 걱정 1. 누가 실수로 해당 클래스의 객체를 만들면 어떡하지? 2. 해당 클래스의 참조 변수 배열로 모든 하위 객체들을 특정 메소드를 실행하게 할려면 하위클래스에서 오버라이딩할 메소드가 해당 클래스에 필요한데? => 추상 메서드와 추상 클래스가 한번에 해결! 해당 클래스를 상속한 하위클래스가 특정 메서드를 오..
객체 지향의 4대 특성 - 캡! 상추다 캡: 캡슐화 (정보 은닉) 상: 상속 (재사용) 추: 추상화(모델링) 다: 다형성(사용 편의) 클래스 vs 객체 = 분류 vs 사물 클래스는 분류에 대한 개념이지 실체가 아니다. 추상화 : 모델링 추상화란 구체적인 것을 분해해서 관찰자가 관심있는 특성만 가지고 재조합하는 것이다. = 모델링 = 자바의 class 키워드 추상화의 결과물은 모델이며, 모델은 자바 언어에서 클래스로 표현된다. Mouse mickey = new Mouse(); mickey = null; 가비지컬렉터가 아무도 참조해주지 않는 Mouse 객체를 쓰레기로 인지하고 수거해간다. 스태틱 스태틱 영역에 올라간 정보는 main() 메서드가 시작되기 전에 올라가서 main() 메서드가 종료된 후에 내려올..

자바 프로그램의 개발과 구동 JDK -자바 개발 도구 JVM용 소프트웨어 개발 도구 JRE - 자바 실행 환경 JVM용 OS JVM - 자바 가상 기계 가상의 컴퓨터 자발 개발 도구인 JDK를 이용해 개발된 프로그램은 JRE에 의해 가상의 컴퓨터인 JVM 상에서 구동된다. 자바 개발자는 본인이 사용중인 플랫포에 설치된 JVM용으로 프로그램을 작성하고 배포하면 각 플랫폼에 맞는 JVM이 중재자 역할을 하여 각 플랫폼에서 프로그래을 구동하는데 아무 문제가 없게끔 해준다. 메서드 스택 프레임 JRE는 프로그램안에 main()메서드 가있는지 확인하고 main() 메서드의 존재가 확인되면 JRE는 프로그램 실행을 위한 사전 준비에 들어간다. -> 가상 기계인 JVM을 부팅 부팅된 JVM은 목적 파일을 받아 그 목..