///////
Search

알고리즘, 토비의 스프링1장_김지수

알고리즘

1. 별찍기 정사각형

💡n을 받으면 n*n을 출력한다.
Plain Text
복사
코드

2. 별찍기 직사각형

💡 x, y를 받으면 x * y사이즈의 사각형 출력하기
Plain Text
복사
코드

3. 재귀로 별찍기

재귀함수란?

함수에서 자기 자신을 다시 호출해 작업을 수행하는 방식이다.
함수를 호출할 때마다 콜스택에는 함수의 매개변수, 지역변수, 반환주소값등을 모두 저장하게 된다.

재귀함수 주의 사항

public void printStar(int n){ if(n==0) return; System.out.print("*"); }
Java
복사
if(n==0) return; 이와 같은 함수를 빠져나오는 조건문이 빠진다면 무한루프 문제가 생긴다.
컴퓨터의 메모리(콜스택)에 한계치 이상의 함수들이 호출된다면 Stack overflow가 발생한다.
함수를 빠져나오는 조건문을 잘 설정해야 한다.

재귀함수의 장단점

장점
함수의 내용이 간결해진다.
불필요한 변수를 선언할 필요가 없기에 공간 복잡도가 줄어든다.
단점
stack overflow가 발생할 수 있다.

CodeUp 1859: [재귀함수] 별 삼각형 출력하기

설계
전체 코드

4. CodeUp 1356: 사각형 출력하기 2

https://codeup.kr/problem.php?id=1356
코드

토비의 스프링 1장 (오브젝트와 의존관계)

실습준비

gradle 프로젝트 빌드 와 jdbc 드라이버 implementation
insert, Select 구현

1. 관심사의 분리

유튜브 강의

이전 코드의 문제점

💡 중복되는 부분이 많다. 만약 중복되는 내용에서 수정이 필요하다면 반복적인 수정 작업이 이루어진다.
Plain Text
복사

중복되는 부분을 method로 분리

// insert, select의 공통된 부분 Map<String,String> env = System.getenv(); Connection c = DriverManager. getConnection( env.get("DB_HOST"), env.get("DB_ID"), env.get("DB_PASSWORD"));
Java
복사
코드

2. Abstract Class(추상클래스)

이전 코드의 문제점

💡 다른 db 서버에 users 테이블을 구현하고 UserDao의 기능을 사용하는 것을 원할때 UserDao의 소스코드를 공개해야한다. 이를 해결하기 위해 Template Method Pattern으로 구현 * Template Method Pattern : 공통부분은 남기고 변화가 있는 부분을 abstract method로 만드는 것
Plain Text
복사

Template Method Pattern

코드 (Abstract)
코드 (Abstract 클래스를 상속받은 클래스)

3. Class로 분리

이전 코드의 문제점

💡 상속관계는 많은 한계점이 있다. 만약 UserDao를 상속받아야할 클래스가 다른 클래스를 먼저 상속받고 있다면 문제가 발생한다. 상속관계는 다중상속이 지원되지 않는다. 그래서 connection을 클래스로 분리하여 해결해 볼려고 한다.
Plain Text
복사
코드

4. Interface의 도입

이전 코드의 문제점

💡UserDao에서 jdbc와 특정 db와 연결된 AWSConnectionMaker의 객체를 사용하고 있다. 이는 jdbc와 다른 db와 연결할 때 클래스 생성, connection 객체 변경 등 수정해야할 부분이 많다. 이를 해결하고자 interface를 적용한다.
Java
복사
코드