[2023.10.19] 개발자 교육 19일 차 : 강의-복습, 채팅앱, 오라클 [구디 아카데미]

DaramGee·2023년 10월 19일
0

오늘 정리

백엔드 코드 설계란? 눈에 보이지 않는 설계라 그리기 어려움. 각자의 위치와 순서, 클래스 배치에 따라 기능이 달라질 수 있어서 전체적인 그림을 볼 줄 아는 것이 중요하다.

제네릭이란? 우리가 변수를 선언할때 변수 타입을 지정해주듯이, 제네릭은 객체(Object)에 타입을 지정해주는 것이라고 보면 된다.

복습

  1. Chat 프로젝트
  • ⓒ ChatServer
    • 챗서버에 들어오는 클라이언트 맞이 클래스
    • ChatServerThread tst = new ChatServerThread(this);
      • 서버에 접속한 소켓정보를 ChatServerThread에서 클라이언트들을 관리해야 하니까 원본을 넘긴다.(파라미터 여러개를 입력해서 각 변수별로 넘길수도 있지만, 여러개를 넘길 때는 클래스 자체를 넘겨서 편하게 사용하자→넘겨받은 클래스의 전변을 쓸 수 있음.)
  • ⓒ ChatServerThread
    • ChatServer에서 넘겨받은 클라리언트들의 정보(globalList)를 관리하는 클래스
    • 왜 접속한 클라이언트의 이름(chatName)은 전변으로?
      • 내가 입장하기 전 입장한 클라이언트에게도 메시지 전달해야함
  • ⓒ ChatClient
    - 말하기 구현(oos.writeObject("200|kiwi|tomato|메시지 내용") -> 프로토콜 설계 : “메시지유형|누가|누구에게|무엇을”)

강의 내용

  • ObjectInputStream/ObjectOutputStream
    • Object 를 단위로 읽고 쓰기
  • 제네릭 복습하기 (아래 해결)
    • 제네릭을 List2로 바꾼다(1단계)
    • 제네릭에 들어가는 클래스를 인스턴스화하여 사용
class Customer3 extends Thread{

}
public class List2 {
	/*선언부*/
	List<Customer3> list = new Vector<>();
	/*정의메소드*/
	public void methodA() {
		list.add(this);
	}
	/*메인메소드*/
	public static void main(String[] args) {
		List2 l2 = new List2();
		l2.methodA();
	}
}
class Customer3 extends Thread{
}
public class List2 {
	/*선언부*/
	List<Customer3> list = new Vector<>();
	/*정의메소드*/
	public void methodA() {
		Customer3 cs = new Customer3();
		list.add(cs);
	}
	/*메인메소드*/
	public static void main(String[] args) {
		List2 l2 = new List2();
		l2.methodA();
	}
}
  • 다형성 활용
    • 아래 두 코드의 생성은 모두 가능하다 상위인 Thread를 선언부에 두는 것을 더 지향함

        (다형성을 이해하고 있다는 것) 
  		ChatClientThread tct = new ChatClientThread(this);
			Thread tct = new ChatClientThread(this);

  • 오라클(DataBase)
    • 용어설명
      • DDL문
        • create(Table, Procedure(제어문, 배열선언, 변수선언), Function(함수)), alter(수정), drop(삭제)
      • pk는 인덱스를 제공한다.
        • 아래에서 book1은 인덱스 이름임.

          create table book1(
           b_no number(5) constraints book1_pk primary key,
           b_title varchar2(30) not null,
           b_author varchar2(30) not null,
           b_price number(7) default 0
          );
      • ename → 기본키x, 인덱스 x, 중복허용됨, 무결성 제약조건(중복되어서는 안 됨)
      • 시퀀스 → 목록 추가에 따라 추가되는??
        • 오라클에서는 자동 증가 컬럼을 사용할 수가 없다. 다른 DB에서는 컬럼 자체에 옵션이 있으나, 오라클에서는 컬럼의 값을 증가시키기 위해서는 MAX(컬럼) + 1 또는 시퀀스를 사용하여 일련번호를 부여해야 한다.
        • 안전하게 채번이 되기 때문에 사용함.
        • 생성방법(스키마 브라우저 → 시퀀스 카테고리 선택 → 크리에이트 시퀀스)
        • nextval & currval
          • nextval → 시퀀스 값 증가
          • currval → 현재 시퀀스
        
    • 단축키
      • ctrl + e : excute plan, 테이블을 엑세스하지 않고 index를 읽어서 원하는 조건을 조회해줌.
      • ctrl + enter : 해당 블럭 실행
    • 명령프롬프트로 오라클 연결 설정 방법
      • sqlplus id/pw@IP:1521:orcl11
      • 오류 생기면 작업관리자 서비스에서 오라클 세 개 다시 시작하기 (서버 기동)
      • 암호는 눌러도 투명함.

  • 오라클 with Map
    • Map은 한 개의 Row만 or 한 개의 컬럼 담을 수 있음.

      ( MyBatis(SQL) 오픈소스 - 생산성 높음, 코딩양 30% 감소)

    • 오라클을 통해 table의 틀 저장 가능

      create table book1(
       b_no number(5) constraints book1_pk primary key,
       b_title varchar2(30) not null,
       b_author varchar2(30) not null,
       b_price number(7) default 0
      );
      
      insert into book1(b_no,b_title,b_author,b_price)
      values(1, '자바의정석','남궁성',30000);
      
      insert into book1(b_no,b_title,b_author,b_price)
      values(2, '오라클','나신입',20000);
      
      insert into book1(b_no,b_title,b_author,b_price)
      values(3, 'html5','나초보',50000);
      
      select b_no, b_title, b_author, b_price from book1
      
      commit;

강의 마무리

  • 제네릭 개념 이해하고, 생성 연습하기

0개의 댓글