[2023.10.26] 개발자 교육 24일 차 : 강의-복습, 싱글톤, 예외처리 [구디 아카데미]

DaramGee·2023년 10월 26일
0

오늘 정리

private? 사용은 조금 불편하지만 유효성을 체크한다거나 안전하게 코드를 설계하는 것에 꼭 필요하니 친해지자.

싱글톤 패턴? 여러 접근에도 공유 자원을 관리하여 일관성을 유지할 수 있다.

복습

  • 상속 & 추상클래스 & 인터페이스 (for API 활용능력)

    • 상속

      • A is a B 관계일 때 적용

      • extends 키워드 사용

      • 부모가 정의한 필드(전변) 메소드를 자손이 언제든 사용 가능(재사용성)

      • but, 클래스 사이의 결합도 높음 → 추상클래스, 인터페이스 중심 코딩 전개 추천

      • 상속을 받을 때는 상위클래스보다 하위클래스를 상속받는 것이 더 많은 메소드를 호출할 수 있다.

        //EMain is a E
        class E{
        	public E() {
        		System.out.println("E()");
        	}
        	public void m() {
        	}
        }
        public class EMain extends E {
        	public EMain() {
        		System.out.println("EMain()");
        	}
        	//부모 메소드 오버라이드 -> 틀을 바꿔서 사용하는 건 안 됨(약속)
        	@Override //주석이 아님 
        	public void m() {
        	}
        	//메소드 오버로딩
        	public void m(int i) {
        	}
        	public static void main(String[] args) {
        		new EMain(); // 호출하게 될 때 부모인 E의 생성자부터 거쳐서 내려옴 -> 메모리에 부하가 올 수 있음. 
        	}
        }
    • 추상클래스 & 인터페이스

    • 설계의 확장(새로운 컨셉의 객체, 서비스를 제공)

    • 결합도 낮아짐, 단위테스트 가능

    • 인터페이스는 일반메소드, 생성자 갖지 못 함/추상클래스는 일반메소드, 생성자 모두 가질 수 있음

    • but, 인스턴스화 할 수 없음.

      /*누가 더 많은 메소드를 구현하나? my = you  
        왜? 인터페이스의 메소드는 구현체가 없이는 구현이 되지 않음.  
        my, you 모두 ArrayList 클래스를 사용하여 생성된 객체입니다. 따라서 기본적인 메소드는 동일
        누가 더 많은 메소드를 갖고 있나? my > you*/
      	List <Object> my      = new ArrayList<>();
      	ArrayList<Object> you = new ArrayList<>();

  • 예외처리
    • throws
      • 예외처리 미루기, 호출한 곳에서 예외처리하기(후처리)
      • 클래스에 대한 제어권이 개발자인 나에게 없음. 스프링과 같은 FW가 대신 주입해줌
    • throw 사용 예시
      • MVC 패턴
      • 게시판 형태 트랜잭션 처리 필요
      • Moderl 계층에서 조건에 따라 하나의 업무로 규정되어 둘 다 처리되었을 때만 커밋
      • 어느 하나라도 문제가 발생하면 모두 롤백해야하는 경우 그 시점을 인터셉트 할 목적(관여하여 흐름을 바꾸기 위해)으로 사용할 수 있음.

강의 내용

  • 싱글톤패턴?

💡 1초에 2000명씩 접속한다면?
인스턴스화를 2000번 진행하여 각각 다르고 다른 값을 가진 객체를 생성함.(VO)
→ private / 캡슐화 / 유효성체크 필요 / 객체 생성을 생성자(new)를 사용하지 않고, static 메소드의 리턴타입을 통해 받아 온다.
(→ thi를 사용하여 원본을 유지함)

- 프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 패턴!!
- 외부에서 사용하지 못 하도록 생성자를 묶음
- static
    - 싱글톤패턴, 인스턴스화 필요 x
    - 사용빈도 높지 않지만 웹서비스 구현 시 필요?!

  • 자바로는 웹서비스 제공할 수 없음(http프로토콜 지원 api 없음)
    • 서버에서 동작하는 applet 지원 → Servlet 生(멀티스레드+싱글톤 서비스 완성)

  • 오라클 연동 방법
    • JDBC API 연동
      • 기본적인 방법, 실 사용 x
    • MyBatis
      • ORM 솔루션, 오픈소스, 라이브러리
      • 라이브러리(주도권, 제어권 없음→손쉽게 프로젝트에 반영 가능)
      • 조회결과를 resutlType에 지정한 객체에 자동 담기
    • Spring 프레임워크
      • 프레임워크(주도권(life cycle) 있음→틀, 제어권 가짐(제어역전))
      • spring-core.jar 지원
      • 추상클래스, 인터페이스 제공
      • JPA API 활용하여 JDBC 연동(Mybatis대신 Hivernate사용)
      • DML 없음(직관적 x) → 데이터셋에 필요한 클래스를 설계해야 한다.
      • 프레임워크이기 때문에 개발자가 직접 인스턴스화하지 않는 대신 Spring은 getter와 setter 컨벤션을 사용한다. (추후에는 Lombok Library로 대체 가능하다 기능이 생략되기도 함)

  • getter & setter
    • 객체에 접근하는 것을 private으로 막음(정보은닉, 캡슐화)
    • 접근하기 위해선 getter & setter를 사용해야 해서 약간은 불편
    • 파라미터는 필요없지만 리턴 타입은 있음(왜?읽기), setter의 파라미터를 통해 객체를 주입받는다.
    • but, 입력받은 값(하나의 인스턴스에 국한)에 대해 유효성을 체크하는 코드를 추가할 수 있고, 시스템을 안전하게 구축한다.
    • 필드(전변)에 오는 타입이 참조형인 경우, setter 메소드를 통해 객체가 주입됨.

강의 마무리

  • 싱글톤 패턴의 쓰임에 대해 익히기
  • getter & setter를 자연스럽게 익히기

0개의 댓글