//////
Search
📓

10/18 회고록

생성일
2022/10/18 13:16
태그

김기헌

Code Up 1859 (재귀 별찍기)

public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int limit = sc.nextInt(); Main m = new Main(); m.printStar(1, limit, ""); } public void printStar(int n, int limit, String str) { if (n > limit) return; if (n == str.length()) { System.out.println(str); printStar(n+1, limit,""); return; } printStar(n, limit,str + "*"); } /* }
Java
복사

Connection 분리

효율적인 코드와 SOLID 원칙을 지키기 위해 분리 필요
Abstract Class로 분리
public abstract class UserDaoAbstract { public abstract Connection makeConnection() throws SQLException; }
Java
복사
public class AWSUserDaoImpl extends UserDaoAbstract{ @Override public Connection makeConnection() throws SQLException { Map<String, String> env = System.getenv(); Connection c = DriverManager.getConnection( env.get("DB_HOST"), env.get("DB_USER"),env.get("DB_PASSWORD")); return c; } }
Java
복사
Abstrat Class는 확장에 용이하지 않기 때문에 좋은 방법은 아니다
Class로 분리
public class UserDao { AwsConnectionMaker awsConnectionMaker = new AwsConnectionMaker(); public void add(User user){ Connection c = awsConnectionMaker.makeConnection(); } }
Java
복사
public class AwsConnectionMaker { public Connection connectionMaker() throws SQLException { Map<String, String> env = System.getenv(); Connection c = DriverManager.getConnection( env.get("DB_HOST"), env.get("DB_USER"), env.get("DB_PASSWORD")); return c; } }
Java
복사
UserDao클래스에서 AwsConnectionMaker awsConnectionMaker = new AwsConnectionMaker(); 라고 직접 명시해주는 것은 강한 결합을 나타낸다 따라서 클래스 분리 방법 또한 적합하지 않다.
Interface로 분리
public interface ConnectionMaker { Connection connectionMaker() throws SQLException; }
Java
복사
public class AwsConnectionMaker implements ConnectionMaker { @Override public Connection connectionMaker() throws SQLException { Map<String, String> env = System.getenv(); Connection c = DriverManager.getConnection( env.get("DB_HOST"), env.get("DB_USER"), env.get("DB_PASSWORD")); return c; } }
Java
복사
public class LoacalConnectionMaker implements ConnectionMaker{ @Override public Connection connectionMaker() throws SQLException { Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/likelion-db","root","--------"); return c; } }
Java
복사
public class UserDao { private ConnectionMaker connectionMaker; public UserDao(){ this.connectionMaker = new AwsConnectionMaker(); } public UserDao(ConnectionMaker connectionMaker){ this.connectionMaker=connectionMaker; } }
Java
복사
인터페이스를 사용하면 결합도가 낮아지기 때문에 가장 적합한 분리 방법이다.

김상호

[도전] 재귀로 별찍기

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n =sc.nextInt(); for (int i = 1; i <= n; i++) { if(i == 1 || i == n) { for (int j = 1; j <= n ; j++) { System.out.print("*"); } }else { System.out.print("*"); for (int j = 0; j <n-2 ; j++) { System.out.print(" "); } System.out.print("*"); } System.out.println(); } } }
JavaScript
복사

[디자인 패턴] 템플릿 메소드

템플릿 메소드란?
어떤 작업을 처리하는 부분을 서브 클래스로 캡슐화 해서 전체 일을 수행하는 구조는 바꾸지 않으며 특정 단계에서 수행하는 내역을 바꾸는 패턴이다. 전체적인 기능은 동일하면서 코드 중복을 최소화 할때 유용하다.

템플릿 메소드의 장단점

장점

단점
Read-Line-parser 파일의 로컬과 awsDB에 연결해주는 connection 파일을 분리해 주었습니다.
AwsConnectionMaker 클래스에서는 Aws 서버와 연결해주는 코드를 작성해 주었고
LocalConnectionMaker 클래스에는 local db와 연결해주는 코드를 작성해 주었습니다.
ConnectionMaker 인터페이스에는 Aws,Local에서 동시에 사용하는 SQLException 예외처리 코드를 입력해 넣어줬습니다.

추상클래스와 인터페이스의 차이

추상클래스
일반 클래스와 같으며 상속을 통해 자손 클래스에서 완성하도록 유도하는 클래스 클래스 앞에 ‘abstarct’를 사용하고 상속을 통해 구현해야한다는 것을 알려준다. 상속을 위한 클래스이기 때문에 따로 객체를 생성 할 수 없다.
인터페이스
인터페이스도 추상클래스처럼 다른 클래스를 작성하는데 도움을 주는 목적을 가진다. 하지만 클래스와 다르게 다중상속이 가능하다.
추상클래스가 미완성 설계도라면 인터페이스는 기본 설계도 추상클래스는 “~이다.” 인터페이스는 “~을 할수있는” 추상클래스는 정의를 하는 반면 인터페이스는 길을 알려주는 느낌

이가현

알고리즘

정사각형 별찍기
public class SquareStar { static void starMarker(int x){ for (int i = 0; i <x; i++) { for (int j = 0; j < x; j++) { System.out.print("*"); } System.out.println(); } } public static void main(String[] args) { SquareStar squareStar = new SquareStar(); SquareStar.starMarker(3); } }
Java
복사
매개변수 2개인 사각형 별찍기
public class RectangleStar { static void starMarker(int x,int y){ for (int i = 0; i <x; i++) { for (int j = 0; j < y; j++) { System.out.print("*"); } System.out.println(); } } public static void main(String[] args) { RectangleStar squareStar = new RectangleStar(); RectangleStar.starMarker(3,5); } }
Java
복사

JDBC로 DB연동 리팩토링

리팩토링 진행 단계
1.
method로 분리한다
2.
Class로 분리한다
3.
Interface를 적용한다
1.method로 분리
접근제어자 : private Return type : Connection
환경변수 설정 중복부분 method
insert메서드에 적용
select메서드에 적용
test method의 id중복 리팩토링
2.class로 분리
클래스 분리
LocalConnectionMaker
추상 클래스
공통부분을 남기고 변화가 있는 부분을 abstract method로 만드는 것
Template Method Pattern
3.interface로 분리
interface
LocalConnectionMaker
UserDao

임학준

조국현

최아영

알고리즘 실습

정사각형 별찍기
직사각형 별찍기
삼각형 별찍기

Connection 분리

abstract로 분리
interface로 분리
test