1. 별찍기
1. 정사각형
코드
//출력결과
*****
*****
*****
*****
*****
Java
복사
2. 직사각형
코드
//출력결과
***
***
Java
복사
3. 재귀 삼각형(코드업 1859번)
코드
//출력결과
*
**
***
****
*****
Java
복사
•
재귀함수: 함수에서 자기 자신을 다시 호출해 작업을 수행하는 방식이다.
•
재귀함수의 조건
◦
끝나는 조건이 있어야 한다.
◦
변화를 줘야 한다.
•
사용하는 이유
◦
재귀를 썼을 때 코드 가독성이 올라가거나 코드 구현이 간단해 지는 경우 사용한다.
◦
for문을 사용하지 않고 풀어야 할 때 사용한다.
4. 빈 사각형 (코드업 1356번)
코드
//출력결과
*****
* *
* *
* *
*****
Java
복사
2. 토비의 스트링
1. UserDao 생성
User.java
UserDao.java
•
기존에 만들었던 코드를 다시 불러오면서 add()메소드에 User를 파라미터로 받도록 수정했다.
•
위 코드의 단점: DB의 연결, SQL Query문, 리소스 반환등 add()와 get()메소드에 중복되는 부분이 많기 때문에 하나를 수정하려면 전체 코드를 수정해야 한다.
2. 테스트 코드 생성
UserDaoTest.java
•
Gradle에서 add()메소드와 get()메소드를 테스트하는 테스트 코드를 생성한다.
3. 추상클래스
UserDaoAbstract.java
AWSUserDaoImpl.java
UserDaoTest.java
•
추상클래스란 Abstract Method를 최소한 1개를 포함 하고 있는 Class이다.
•
추상클래스 자체는 쓸 수 없고 꼭 구현체를 구현 해주어야 한다.
•
위 코드와 같이 공통부분을 남기고 변화가 있는 부분을 abstract method로 만드는 것을 Template Method Pattern이라고 한다.
Template Method Pattern
- 상속을 통해 슈퍼 클래스의 기능을 확장 할 때 사용하는 대표적인 방법으로, 변하지 않는 기능을 슈퍼 클래스에 만들어두고 자주 변경되는 기능을 서브 클래스에서 만든다.
•
기존에 있던 UserDao클래스를 UserDaoAbstract라는 추상클래스로 변경하고 getConnection()메소드를 추상메소드로 변경한다. getConnection()메소드는 AWSUserDaoImpl클래스가 직접구현한다.
•
위 코드의 장점: 새로운 DB를 연결할때 UserDao를 상속을 통해 확장해주기만 하면 된다.
•
위 코드의 단점: 상속을 사용한다, 자바는 다중상속을 허용하지 않기 때문에 만약 이미 UserDao가 상속을 사용하고 있다면 사용하지 못한다.
4. 클래스 분리
SimpleConnectionMaker.java
UserDao.java
•
3번에서 사용한 추상화를 제거하고 클래스로 분리한다.
•
SimpleConnectionMaker라는 새로운 클래스에 DB연결 메소드를 넣고 UserDao에서 오브젝트를 만들어두고 add()와 get() 메소드에서 사용한다.
•
위 코드의 장점: 상속을 사용하지 않는다.
•
위 코드의 단점: 상속을 사용했을 때에 비해 UserDao와 특정 클래스가 강하게 결합되어 있기 때문에 UserDao코드의 수정 없이 DB연결 기능을 변경 할 수 없다.
5. 인터페이스 분리
AWSConnectioinMaker.java
ConnectionMaker.java
UserDao.java
UserDaoTest.java
•
앞선 문제점들을 해결하기 위해 인터페이스를 도입한다.
•
ConnectionMaker라는 인터페이스를 선언하고 AWSConnectionMaker클래스가 인터페이스를 구현한다.
•
위 코드의 단점: 아직 UserDao클래스에 AWSConnectionMaker클래스의 생성자를 호출해서 오브젝트를 생성하는 코드가 남아있기 때문에 여전히 UserDao클래스를 수정해야 한다.