본문 바로가기
728x90

Books23

15. 클래스와 맴버의 접근 권한을 최소화하라 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 바로 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐다 - 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다 - 오직 API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 전혀 개의치 않는다. - 정보 은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리다. 정보 은닉의 장점은 정말 많다 그중 대부분은 시스템을 구성하는 컴포넌트들을 서로 독립시켜서 개발, 테스트, 최적화 적용, 분석, 수정을 개별적으로 할수 있게 해주는것과 연관 되어 있다 * 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다 * 시스템 관리 비용.. 2021. 10. 11.
14. Comparable을 구현할지 고려하라 이번에는 Comparable 인터페이스의 유일무이한 메서드인 compareTo를 알아보자 - compareTo는 Object의 메서드가 아니다 - 성격은 두 가지만 빼면 Object의 equals와 같다 - compareTO는 단순 동치성 비교에 더해 순서까지 비교할 수 있으며, 제네릭하다 - Comparable을 구현했다는 것은 그 클래스의 인스턴스들에는 자연적인 순서가 있음을 뜻한다 - Comparable을 구현한 객체들의 배열은 다음처럼 손쉽게 정렬할 수 있다. Arrays.sort(a); 검색, 극단값 계산, 자동 정렬되는 컬렉션 관리도 역시 쉽게 할 수 있다 public class WordList{ public static void main(String[] args){ Set s = new Tr.. 2021. 10. 10.
4.1 MySQL 엔진 아키텍처(1) MySQL 서버는 사람의 머리 역할을 담당하는 MySQL 엔진과 손발 역할을 담당하는 스토리지 엔진으로 구분할 수 있다. 그리고 손과 발의 역할을 담당하는 스토리지 엔진은 핸들러 API를 만족하면 누구든지 스토리지 엔진을 구현해서 MySQL 서버에 추가해서 사용할수 있다. 이번 장에서는 MySQL 엔진과 MySQL 서버에서 기본으로 제공되는 InnoDB 스토리지 엔진, 그리고 MyISAM 스토리지 엔진을 구분해서 살펴보겠다 먼저 MySQL의 쿼리를 작성하고 튜닝할 떼 필요한 기본적인 MySQL 엔진의 구조를 훑어 보겠다 - MySQL 서버는 다른 DBMS에 비해 구조가 상당히 독특하다 - 사용자 입장에서 보면 거의 차이가 느껴지지 않지만 이러한 독특한 구조 때문에 다른 DBMS에서는 가질 수 없는 엄청난.. 2021. 10. 9.
13. clone 재정의는 주의해서 진행하라(2) 코드 13-3 잘못된 clone 메서드 - 가변 상태를 공유한다! // 코드 13-1 가변 상태를 참조하지 않는 클래스용 clone 메서드 (79쪽) @Override public PhoneNumber clone() { try { return (PhoneNumber) super.clone(); } catch (CloneNotSupportedException e) { throw new AssertionError(); // 일어날 수 없는 일이다. } } - 복제본은 자신만의 버킷 배열을 갖지만, 이 배열은 원본과 같은 연결 리스트를 참조하여 - 원본과 복제본 모두 예기치 않게 동작할 가능성이 생긴다 - 이를 해결하려면 각 버킷을 구성하는 연결 리스트를 복사해야 한다 코드 13-4 복잡한 가변 상태를 갖는 .. 2021. 10. 6.
13. clone 재정의는 주의해서 진행하라(1) 메서드 하나 없는 Cloneable 인터페이스는 대체 무슨 일을 할까? - Object의 protected 메서드인 clone의 동작 방식을 결정한다 - Cloneable을 구현한 클래스의 인스턴스에서 clone을 호출하면 그 객체의 필드들을 하나하나 복사한 객체를 반환하며, - 그렇지 않은 클래스의 인스턴스에서 호출하면 CloneNotSupportedException을 던진다 - 인터페이스를 상당히 이례적으로 사용한 예이니 따라하지는 말자 인터페이스를 구현한다는 것은 일반적으로 해당 클래스가 그 인터페이스에서 정의한 기능을 제공한다고 선언하는 행위 - 그런데 Cloneable의 경우에는 상위 클래스에 정의된 protected 메서드의 동작 방식을 변경한 것이다. 실무에서는 Cloneable을 구현한 클.. 2021. 10. 5.
3.5 역할(Role) MySQL 8.0 버전부터는 권한을 묶어서 역할을 사용할 수 있게 됐다. 실제 MySQL 서버 내부적으로 역할은 계정과 똑같은 모습을 하고 있다 우선 CREATE ROLE 명령을 이용해 role_emp_read 와 role_emp_write라는 이름의 역할을 정의 CREATE ROLE role_emp_read, role_emp_write; - CREATE ROLE 명령에서는 빈 껍데기만 있는 역할을 정의 GRANT 명령으로 각 역할에 대해 실질적인 권한을 부여하면 된다 ## employees DB 의 모든 객체에 대해 읽기 권한만 부여 GRANT SELECT ON employees.* TO role_emp_read; ## employees DB 의 모든 객체에 데이터변경(INSERT, UPDATE, DE.. 2021. 10. 4.
728x90