본문 바로가기

분류 전체보기

(150)
아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하여라. 개념 중첩 클래스 특정 목적을 위해 한 클래스에서 별도로 정의한 내부 클래스 참고: https://jobjava00.github.io/language/java/basic/nested-class/ 원칙 1. public클래스(=패키지 바깥에서 접근할 수 있는 클래스)는 접근자를 제공한다. 1.1 왜 접근자를 사용해야할까? - 내부 표현 방식을 언제든지 바꿀 수 있는 유연성이 생긴다. - 필드를 공개할 경우 클라이언트가 이를 직접 사용하므로, 마음대로 바꿀 수 없어 유연성이 떨어진다. 1.2 클래스의 필드를 잘못 노출한 예시 1.2.1 java.awt.package의 Point 클래스 2. package-private 클래스 or private 중첩 클래스는 데이터 필드를 노출해도 문제가 없다. 책에서 이해..
아이템 15. 클래스와 멤버의 접근권한을 최소화하여라 개념 정보은닉 1. 뜻 클래스 내부 데이터, 구현정보를 외부 컴포넌트에서 분리시키는 것 2. 장점 2.1 시스템 개발 속도 높인다. : 여러 모듈 동시에 개발 가능 2.2 다른 컴포넌트로 교체가 쉽다. 2.3 소프트웨어의 재사용성을 높인다. (필요한 모듈만 분리하여 타 프로그램에 붙이면 됨) 접근 제어자 private: 멤버가 선언된 클래스 내 default: 접근 제어자 생략시 자동 부여. 동일 패키지 내 protected: 동일 패키지 내 or 상속했을 경우 public: 어디서든 정보 은닉 원칙 1. 모든 클래스&멤버의 접근성을 가능한 낮춘다. 2. public 클래스의 인스턴스 필드는 가능한 public이 아니어야한다. - 값의 불변성을 보장해야한다. - thread-safe하지 않다. 3. 클래..
[JPA 기본] 2. JPA 소개 1. SQL 중심적인 개발의 문제점 1.1 반복되는 CRUD 쿼리 작성 작업 INSERT, SELECT, UPDATE, DELETE....계속 반복만하는 지루한 작업의 연속이다. 1.2 필드 추가시 객체 변환, 관련 쿼리 일괄 변경 (이건 실제 내 경험)최근 프로젝트에서 실제로 일어난 일이다. 기존의 정책에서는 회원 정보 테이블에서 NAME이라는 컬럼을 사용하고 있었다. 이 안에 사용자 성, 이름 모두 포함되었다. 그런데, "우리는 글로벌 서비스니까, 외국인들도 사용하기 쉽게 성, 이름을 구분해서 입력 받아야겠다!"라는 요구사항이 들어왔다. FIRST_NAME, LAST_NAME으로 필드 추가는 쉬웠지만, NAME 컬럼을 사용하는 쿼리를 조회한 결과 수백개의 쿼리가 나왔다 (흑흑) 결국 몇 일에 걸쳐 F..
[JPA 기본] 1. 강좌 소개 김영한님의 'JAVA ORM 표준 JPA 프로그래밍 - 기본편' 강의를 들으며 정리한 노트입니다. 나는 왜 JPA를 공부하는가 JPA가 자바의 객체 지향 관점에 적합하다는 것은 잘 알고 있었다. 하지만 러닝커브+현재팀에서 사용하지 않음(우리는 SqlMapper MyBatis를 사용한다)을 핑계로 공부를 미뤄왔다. 이번에 JPA를 사용하는 회사로 이직하면서, 1월 입사를 앞두고 부랴부랴 공부를 시작했다. (아자아자!!) DB 접근 방식의 발전 과정 JDBC -> MyBatis, JdbcTemplate -> JPA JPA 실무 도입 왜 어려울까? 객체와 테이블을 효율적으로 매핑하도록 설계하는 노하우가 필요하다 강의 목표 객체와 테이블 설계 매핑 - 객체와 테이블을 제대로 설계하고 매핑하는 방법 - 기본 키와..
static import 란 [static import란] 자바 1.5부터 static import가 지원된다. import에 static을 붙이면, import된 정적 멤버필드, 정적 메서드는 클래스 이름 없이 접근 가능하다. [static import 전] line5: 일반 import line23: Assertions 클래스를 명시해준 후, assertThat static 메서드를 사용한다. [static import 후] line 8: import static org.assertj.core.api.Assertions.*;
[JPA] Entity 설계시 ID 값을 Long으로 지정하는 이유 JPA 공부중 의문이 생겼다. 왜 id는 int, long, Integer가 아닌 Long을 사용할까? 1) int가 아닌 이유 long이 더 많은 값을 저장할 수 있다. (비교) int - 저장 공간: 32 bit - 값의 범위 : -2147483648 ~ 2147483647 long - 저장 공간: 64 bit - 값의 범위: -9223372036854775808 ~ 9223372036854775807 2) long 대신 Long 쓰는 이유 long은 primitive type으로, 값이 없을 경우 0으로 초기화된다. 따라서, id가 없어서 0으로 세팅이 된 것인지, 아니면 실제 값이 0인지 데이터만 보고 판별할 수 없다. 반면 Long은 wrapper type으로, 값이 없을 경우 null로 초기화..
[Linux] 파일 접근 권한 변경 디렉토리 소유권 변경 chown {소유권자}:{그룹식별자} 파일명 # 예시 chown jenkinsuser:jenkinsuser server.log 레퍼런스 https://araikuma.tistory.com/117 [Linux] 파일 관리 - chown 파일/디렉토리 소유권 변경 소유권 확인 먼저 소유권을 확인하기 위해서는 아래 명령어로 확인이 가능하다. ls -al 위 명령어를 입력하면 아래와 같은 형태로 결과물이 나온다. -rw-r--r-- 1 kimkc staff 36864 5 10 2015 Currency.db 여기 araikuma.tistory.com
[웹 백엔드 시스템 구현 스터디] 1주차 기록 1. Controller vs RestController 1. @Controleller 1.1 SpringMVC 구조에서 VIEW를 반환하기 위해 사용 1.2 Data 반환 (Json 형태) @ResponseBody 애노테이션 추가 2. @RestController - SpringnMVC Controller에 ResponseBody 추가 된 형태 - 용도: Json의 형태로 데이터 반환 - 반환시 주의사항: 데이터와 상태 코드를 함께 반환할것. // 예. return ResponseEntity.ok(user) 2. ResponseEntity 응답 값 + 응답 코드 반환 3. Component 애노테이션 Bean으로 객체 등록 위와 같은 에러가 났다. 이유 @Component 애노테이션 붙이자. 4. se..