///////
Search

별찍기,토비의스프링_이연재

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클래스를 수정해야 한다.