박수진_1005
JAVA SOLID원칙
1.
SRP: 단일 책임 원칙
•
한 클래스는 하나의 책임만 가져 가야 한다.
•
변경에 있어서 책임이 적으면 잘 적용 된 것이다.
2.
OCP: 개방 - 패쇄 원칙
•
확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
•
다형성의 본질
3.
LSP: 리스코프 치환 원칙
•
기능적인 규약을 맞추고 보장을 해주어야 한다.
4.
ISP: 인터페이스 분리 원칙
•
특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.
5.
DIP: 의존 관계 역전 원칙
•
프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다.
•
즉, 역할에 중점 해야지 구현에 의존하면 안된다.
Even Odd
요구사항
•
홀, 짝 판별 프로그램
•
인터페이스 사용
•
홀/짝 으로 출력될 수도, Odd/Even으로 출력될 수도 있도록 함
•
OCP원칙을 지킬 것
아키텍처 설계
•
OddEvenImple : 프로그램의 인터페이스
•
EnglishOddEven : Odd Even으로 출력
•
KoreanOddEven : 홀, 짝으로 출력
•
OddEvenMain : 메인함수, 인터페이스와 실질적인 OddEven클래스를 조립해주는 역할을 함
•
OddEven : 조건에 맞게 출력될 수 있도록 로직이 구현되어있는 클래스
코드
김준호_1005
Calculator
LSP (Liskov Substitution Principle) 리스코프 치환 원칙
예제
요구사항
1.
NumberGenerator Interface를 활용하여 RandomGenerator, BypassGenerator, SpecificGenerator를 제작합니다.
2.
Calculator를 제작합니다.
a.
plus 기능을 가집니다.
3.
각 메소드는 parameter를 int형 하나만 받습니다.
1. interface NumberGenerator 생성
•
상속받는 Class가 원하는 숫자를 return할 수 있는 설계 틀을 생성.
public interface NumberGenerator {
int create(int num);
}
Java
복사
2-1. NumberGenerator를 상속받는 RandomNumberGenerator생성
•
인터페이스 NumberGenerator 의 메소드 create를 Override하여 랜덤된 숫자를 return
public class RandomNumberGenerator implements NumberGenerator{
@Override
public int create(int num) {
return (int)(Math.random() * num);
}
}
Java
복사
2-2. NumberGenerator를 상속받는 SpecificNumberGenerator생성
•
인터페이스 NumberGenerator 의 메소드 create를 Override하여 특정 숫자를 return
public class SpecificNumberGenerator implements NumberGenerator {
@Override
public int create(int num) {
return 320 * num;
}
}
Java
복사
2-3. NumberGenerator를 상속받는 ByPassNumberGenerator생성
•
인터페이스 NumberGenerator 의 메소드 create를 Override하여 입력된 숫자를 그대로 return
public class ByPassNumberGenerator implements NumberGenerator {
@Override
public int create(int num) { //두 번째 따라하기
return num;
}
}
Java
복사
3. NumberGenerator 를 활용하여 class Calculator 생성
public class Calculator {
NumberGenerator numberGenerator;
int baseNumber;
public Calculator(NumberGenerator numberGenerator) {
this.numberGenerator = numberGenerator;
this.baseNumber = 10;
}
public Calculator(NumberGenerator numberGenerator, int baseNumber) {
this.numberGenerator = numberGenerator;
this.baseNumber = baseNumber;
}
public void plus(int num) {
System.out.println(baseNumber + numberGenerator.create(num));
}
}
Java
복사
4. class Main
RandomNumberGenerator, SpecificNumberGenerator, ByPassNumberGenerator를 바꿔줌으로서 원하는 기능을 바로 바꿀 수 있다.
public class Main {
public static void main(String[] args) {
NumberGenerator numberGenerator = new RandomNumberGenerator();
Calculator calculator = new Calculator(numberGenerator);
numberGenerator.plus(5); // RandomNumberGenerator의 create number return
}
}
Java
복사
public class Main {
public static void main(String[] args) {
NumberGenerator numberGenerator = new SpecificNumberGenerator();
Calculator calculator = new Calculator(numberGenerator);
numberGenerator.plus(5); // SpecificNumberGenerator의 create number return
}
}
Java
복사
public class Main {
public static void main(String[] args) {
NumberGenerator numberGenerator = new ByPassNumberGenerator();
Calculator calculator = new Calculator(numberGenerator);
numberGenerator.plus(5); // ByPassNumberGenerator의 create number return
}
}
Java
복사