Java/객체지향 설계 (7) 썸네일형 리스트형 객체지향 설계 - 개방 폐쇄 원칙 엔티티는 확장을 위해 열려 있어야 하지만 수정을 위해 닫혀 있어야 한다. 기존 코드를 변경하지 않고도 새 기능을 추가 할 수있도록 코드를 작성 하라는 메시지다. 클래스 중 하나를 변경하면 모든 종속 클래스가 변경되야 하는 상황을 방지 할 수 있다. 인터페이스를 사용해 사용하는 코드를 변경하지 않고 쉽게 대체 할 수 있게 구현을 허용한다. 수정을 하지 않고도 계속적인 코드 확장이 가능해진다. 예제를 보면서 확인해보자 여기 일반적인 커피머신이 있다. brewCoffee 로 커피를 추출하는 메소드를 가지고 있다. 이 커피 앱에서 자동으로 커피머신에서 커피를 추출할 수 있게 구현을 했다. 근데 만약 여기서 일반적인 커피 머신이 아니라 새로운 기능들이 추가된 새로운 커피머신을 사용해야 한다면? 이제 여기서 개방 .. 객체지향 설계 - 단일 책임 원칙 클래스는 변경해야할 이유가 하나만 있어야 한다. 책임이란 해야 하는것 객체에 책임을 할당해 작업을 시키는데 단 하나의 책임만 가지는게 좋다. 단일 책임 원칙의 이점? 소프트웨어를 구현하기 쉽게 만들고, 향후 변경될때 부작용을 방지 할 수 있다. 요구사항은 시간이 지나면서 변경을 하게 되는데 이런 요구사항이 클래스의 책임을 변경할수있다. 이렇게 책임을 변경하게 되면 클래스를 다시 책임이 하나가 되도록 변경해줘야한다. 변경하지 않으면 더 복잡하고 부작용이 많아질수 있어 더 많은 작업이 필요하게 된다. 또한, 클래스의 책임이 하나라면 이해하기도 쉬워진다. 변경 사례 하나의 책임이 여러 클래스에 분산되어있는 경우 부가 기능을 별개의 클래스로 분리해 책임을 담당하게 한다. 공통 책임을 한 곳으로 모아준다. 이 공.. 객체지향 특징 - 다형성 다형성이란 어떤 것이 다른 형태로 발생하는 상황을 설명한다. 동일한 인터페이스로 서로 다른 유형의 객체에 접근 할 수 있는 개념을 설명한다. 다형성 종류 정적 또는 컴파일 다형성 동적 다형성 정적 다형성 Java 를 사용하면 동일한 이름을 사용하지만 매개 변수가 다른 메서드를 여러개 구현할수있다. 이걸 메서드 오버로딩이라 하고 정적 형태의 다형성을 나타낸다. 동적 다형성 동적 다형성은 컴파일러가 실행 된 메서드를 결정 짓게 하지 않는다. JVM 런타임에 결정이 된다. 하위 클래스는 상위 클래스의 메소드를 오버라이딩 할 수 있는데 동일한 이름과 매개변수를 공유하지만 다른 기능을 제공 할 수 있다. 이게 다형성의 한 형태라 볼 수 있다. late binding 하위 클래스가 상위클래스 타입으로 생성된 경우를.. 객체지향 특징 - 상속 객체지향 상속이란 속성 및 메서드 집합을 공유하는 클래스 계층 구조를 위해 클래스에서 파생할 수 있는 이론이다 상속 계층 선언 자바에서 클래스는 하나의 다른 클래스에서만 파생될수있다 이 클래스를 수퍼 클래스 또는 상위 클래스라고 한다. 이걸 상속 받은 클래스를 하위 클래스 또는 자식 클래스라고 한다. extends 사용해서 하위 클래스를 확장시킨다. 상속 접근자 상속 받은 하위 클래스는 상위 클래스의 public 또는 protected 접근자만 사용할 수 있다. 만약 서브 클래스와 수퍼 클래스가 같은 패키지 내부에 있다면 패키지 전용 접근자도 사용할 수 있다. super 키워드를 사용해 수퍼 클래스의 메서드를 호출하는데 사용할수있다. 메서드 재정의 상속은 슈퍼클래스의 모든 public, protected.. 객체지향 특징 - 캡슐화 캡슐화란 하나의 유닛(class)에 데이터와 메소드를 함꼐 번들링 해둔 걸 뜻한다. 이 개념은 내부 state를 밖에 숨기는 정보은닉 개념으로도 쓰인다. 객체 외부에서 볼 수 없는 state 를 두고 여기에 접근 할 수 있는 메소드를 제공한다 내부 상태에 대한 접근을 제어 할 수 있다. 접근 수정자 캡슐화를 가능하게 자바에서는 private no modifier protected public 을 제공한다. 표로 설명을 대신한다. 객체지향의 특징 - 추상화 추상화 추상화의 주 목적은 불필요한 디테일 정보들을 사용자로부터 숨기는 것이다. 사용자는 복잡한 로직을 이해할 필요 없이 사용할 수 있다. 예를들어보자 커피가 먹고 싶어서 커피머신에서 스위치를 눌러서 커피를 만들었다고 쳐보자 여기서 커피머신으로 커피를 만든것은 좋은 추상화 예이다. 커피머신의 사용법만 알면 되고 커피머신이 어떻게 커피를 추출하는지는 알필요가 없다. 이걸 자바에서 똑같이 구현해보자 OOP 추상화 커피머신은 어떤 커피를 선택하냐에 따라서 어떻게 커피 빈을 그라인드 할지 결정을 한다 커피 셀렉션은 enum 형태로 각 종류의 커피가 들어있고 우린 단순히 커피머신을 만들때 커피빈과 어떤 커피를 만들지 생성자에서 만들기만 하면된다. 그럼 brewCoffee 를 통해 우리가 선택한 커피가 return.. Java 란? JAVA 자바는 다음과 같은 특징을 포함하는 객체 지향 프로그래밍 언어다. - 플랫폼 독립성 java 컴파일러는 .java 파일을 .class 라는 java 바이트 코드로 변환 시켜 준다. 애플리케이션은 JVM에서 실행되므로 많은 다른 운영 체제와 장치에서 실행될 수 있다. - 자동 가비지 콜레션 Java는 자동으로 메모리를 할당하고 할당을 해제하므로 프로그램은 해당 작업에 부담을 주지 않는다. - 풍부한 라이브러리 자바는 입출력, 네트워킹과 날짜 조작과 같은 작업을 수행하는 데 사용할 수 있는 다양한 라이브러리가 존재한다 JDK Java Development Kit(JDK)는 Java 애플리케이션 개발을 위한 도구 모음 JDK를 사용하면 Java Programming 언어로 작성된 프로그램을 컴파일하여.. 이전 1 다음