목록분류 전체보기 (75)
Kim Jinung
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bJr824/btsgdBJ7xnu/TJ3nTyDv6u776HoWD2JWBK/img.png)
Collection 객체의 그룹을 저장하고 조작할 수 있는 아키텍처를 제공하는 프레임워크다. 인터페이스와 구현체가 존재하며, 인터페이스를 구현하는 1개 이상의 구현체가 존재한다. 자바답게 인터페이스(List, Queue, Set, Deque)를 제공하고, 이에 대한 구현체 클래스를 제공한다. 단순히 해당 프레임워크의 구현체가 제공하는 메서드에 집중하기 보다는 자바에서 왜 이런 인터페이스 상속 구조를 만들었고, 각 구현체는 어떠한 방법을 사용해서 인터페이스를 구현했는 가에 초점을 맞추는 게 중요할 것으로 보인다. Hierarchy of Collection Framework Interface Iterable interface 이터러블 인터페이스는 자료구조에서 순방향으로 요소를 탐색하는 스펙을 정의한다. Co..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/SKs2T/btsgaMZT10W/WyTsAeuOGGHpOEMXpjzOok/img.png)
1. String String은 다음 인터페이스를 모두 구현한다. Serializable: 직렬화 Comparable: 값 비교 CharSequence: 문자 시퀀스 CharSequence Characters의 문자 시퀀스를 표현할 때 사용한다. 다음 세 가지 클래스가 해당 인터페이스를 구현한다. String StringBuffer StringBuilder 일반적으로 프로그래밍 언어에서 String은 Character의 시퀀스다. 그런데 자바의 String은 캐릭터의 시퀀스를 표현하는 '객체'다. 2. How to create String obj? String literal new Keyword 1) String Literal String s1 = "welcome"; String s2 = "welcome..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/YdDlP/btsf2mfTBHu/ZBKz3JfuSkraoEMonRrLSK/img.png)
Overview DBMS는 통상 다음과 같은 레이어로 구성된다. (DBMS마다 구조가 천차만별이지만, 일반적으로는 다음과 같다.) Transport subsystem: 클라이언트의 요청을 받는다. DB 클러스터 노드 간 통신에도 사용한다. Query Processor: 쿼리를 해석, 분석 검증, 최적화하고 실행 계획을 선택한다. Execution Engine: 선택한 실행 계획을 실행한다. 스토리지 엔진의 인터페이스에 해당한다. Storage Engine: 실질적인 데이터 쓰기, 읽기 작업을 담당하는 컴포넌트다. Transport DBMS는 클라이언트/서버 모델에 기반한다. DB를 사용할 때 특정 주소로 연결을 요청하고, 커넥션 풀에서 커넥션을 받아오고, 해당 커넥션을 이용해서 쿼리를 날리는 과정이 익숙..
Primitive type int, char, boolean 등이 그 예시다. 원시 타입의 가장 큰 특징은 다음과 같다. null 값을 가질 수 없다. 값 그 자체다. Wrapper class 래퍼 클래스(Wrapper class)의 메커니즘은 원시 타입을 객체로 변환하는 것이다. 따라서 다음과 같은 특징을 가진다. null 값을 가질 수 있다. 객체를 참조하는 값을 가지고 있다. Why? 왜 굳이 원시 타입을 래핑하는 래퍼 클래스가 별도로 존재할까? 개인적인 추측으로는 자바가 객체 지향 프로그래밍 언어이기 때문이라고 생각한다. 함수형 프로그래밍 언어는 값을 함수의 파라미터로 넘긴다. 범위는 지정하지 않는다. 값을 넘기면 Call by value에 기반하여 계산하고 그 결과를 반환한다. 이때 결과는 파라..
Inheritance, Composition 상속(Inheritacne)는 상위 타입과 하위 타입에 강한 결합도를 만든다. 하위 타입이 상위 타입 코드를 모두 알고 있어야하기 때문이다. 반면에 합성(Composition)은 객체 내부 필드에서 객체를 참조하게 만들고, 클래스의 인터페이스에 의존하게 만드는 방식으로 결합도를 낮춘다. 상속은 타입 계층을 반드시 만들어야 하는 경우에 사용한다. 해당 경우가 아니라면 대부분의 케이스에서 합성을 이용하는 것이 더 좋은 선택이다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/FFCmL/btse9ozi0GV/dRCNp5oIqIQBRCDIyyr5Tk/img.png)
1. JDK, JRE 그리고 JVM JRE(Java Runtime Environment)는 자바 바이트 코드를 실행하기 위한 JVM을 제공한다. 그리고 JDK는 추가적으로 .java 파일을 바이트 코드로 컴파일 하기 위한 javac(java compiler)와 개발에 필요한 기타 유틸리성 파일 들을 제공한다. 2. JVM JVM은 크게 세 부분으로 구분할 수 있다. Class loader Memory area Execution engine Class loader 자바 컴파일러는 .java 파일을 컴파일한다. 그 결과로 .class 확장자를 가진 바이트 코드가 생성된다. 해당 바이트 코드를 JVM 메모리 영역에 올려주는 역할을 하는 게 클래스로더다. 빌트인 클래스 로더는 3가지가 존재한다. 순서대로 더 상..
소프트 웨어 모듈의 세 가지 목적 실행 중에 제대로 동작한다. 간단한 작업만으로도 변경이 가능해야 한다. 특별한 훈련 없이도 개발자가 쉽게 읽고 이해할 수 있어야 한다. 은 총알은 없다. 효율적일지라도, 협업 능력이 제로인 코드는 지양한다.
order test, member test에서 member 데이터가 두 번 들어가는 문제가 발생함 테스트 코드 작성 시 공통 더미 데이터를 밀어 넣어주는 클래스를 하나 만들어주고 싶음
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/svGgY/btsbjiJpwNK/lLf38C5BzyrHcA9j7HkfDk/img.png)
1. JPA(Java Persistence API) JPA는 자바 진영의 표준 ORM 기술이다. 자바 진영이 늘 그렇듯이 그 자체로 구현체를 제공하지 않고 인터페이스를 제공하고 다양한 구현체가 존재한다. 대표적으로 Hibernate가 있다. 2. JPA architecture JPA는 생각보다 아키텍처에 대한 자료를 찾아보기가 힘들다. 클래스 레벨 아키텍처에서 중요한 클래스들은 Persistence, EntityManagerFactory, EntityManager, EntityTransaction, Query가 존재한다. 내부 코드를 뜯어보면 Persistence 클래스가 EntityManagerFactory 객체를 생성하고, EntityManagerFactory 클래스가 EntityManager를 팩토..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/PuXJg/btsaUkg1Kcq/luHDe6xefT6YjrcMnzFxLK/img.png)
1. JDBC(Java Database Connectivity) JDBC는 자바 애플리케이션에서 데이터베이스에 액세스 하는 방법을 명세하는 인터페이스다. 데이터베이스 제품군은 연결 방법이 제각각이다. 따라서 각 데이터베이스에 연결하기 위해서 개발자는 각각의 데이터베이스에 모두 대응해야 한다. 자바 진영에서는 해당 문제를 의존성을 역전 시키는 방법으로 해결했다. 애플리케이션의 비지니스 로직이 데이터베이스 제품군에 의존하는 게 아니라 인터페이스에 의존하도록 했다. 해당 인터페이스가 바로 JDBC다. 자바는 Java Standard Edition에 JDBC 인터페이스를 제공하고, 각 데이터베이스 개발사는 해당 인터페이스를 구현한 DB Driver를 배포한다. 따라서 개발자는 DB 제품군이 변경되더라도 코드를 ..