본문 바로가기

분류 전체보기

(644)
[이펙티브 자바 3/E] 아이템16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 - '퇴보한' 클래스는 public이어서는 안 된다. class Point { public double x; public double y; } - 이런 클래스는 데이터 필드에 직접 접근할 수 있으니 캡슐화의 이점을 제공하지 못한다(아이템 15). - 접근자와 변경자(mutator) 메서드를 활용해 데이터를 캡슐화한다. class Point { private double x; private double y; public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public double getY() { return y; } public void setX(double x) { this.x = ..
[이펙티브 자바 3/E] 아이템15 - 클래스와 멤버의 접근 권한을 최소화하라 - 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 정보 은닉의 장점 - 시스템 개발 속도를 높인다. - 시스템 관리 비용을 낮춘다. - 성능 최적화에 도움을 준다. - 소프트웨어 재사용성을 높인다. - 큰 시스템을 제작하는 난이도를 낮춰준다. - 자바는 정보 은닉을 위한 다양한 장치를 제공한다. => 그중 접근 제어 메커니즘은 클래스, 인터페이스, 멤버의 접근성(접근 허용 범위)을 명시한다. - 기본 원칙 : 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다. - 한 클래스에서만 사용하는 package-private 톱레벨 클래스나 인터페이스는 이를 사용하는 클래스 안에 private static으로 중첩시켜보자(아이템 24). - public일 필요가 없는 ..
[JPA] 5장 - 연관관계 매핑 기초(3) - 양방향 연관관계 양방향 연관관계 - 데이터베이스 테이블은 외래 키 하나로 양방향으로 조회할 수 있다. 양방향 연관관계 매핑 @Entity public class Team { @Id @Column(name = "TEAM_ID") private String id; private String name; // 추가 @OneToMany(mappedBy = "team") private List members = new ArrayList(); ... } - 회원 엔티티에는 변경한 부분이 없지만, 팀 엔티티에는 List members를 추가했다. - @OneToMany에서 mappedBy의 속성은 반대쪽 매핑의 필드 이름을 값으로 주면 된다.(Member.team) 연관관계의 주인 - 엔티티를 양방향 연관관계로 설정하면 객체의 참조는..
[JPA] 5장 - 연관관계 매핑 기초(2) - 연관관계 사용 연관관계 사용 저장 - JPA에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야 한다. public void testSave() { Team team1 = new Team("team1", "팀1"); em.persist(team1); Member member1 = new Member("member1", "회원1"); member1.setTeam(team1); // 연관관계 설정 member1 -> team1 em.persist(member1); } 조회 - 연관관계가 있는 엔티티를 조회하는 방법은 크게 2가지다. - 객체 그래프 탐색(객체 연관관계를 사용한 조회) Member member = em.find(Member.class, "member1"); Team team = member.getTe..
[OS/공룡책] Chapter 3. 프로세스 - IPC 시스템의 사례 IPC 시스템의 사례 POSIX 공유 메모리 - POSIX 공유 메모리는 메모리-사상 파일을 사용하여 구현된다. - 먼저 아래와 같이 shm_open() 시스템 콜을 사용하여 공유 메모리 객체를 생성해야 한다. fd = shm_open(name, O_CREATE | O_RDWR, 0666); - 객체가 설정되면 ftruncate() 함수를 사용하여 객체의 크기를 바이트 단위로 설정한다. ftruncate(fd, 4096); - 마지막으로 mmap() 함수가 공유 메모리 객체를 포함하는 메모리-사상 파일을 구축한다. - 생산자-소비자 모델을 사용하는 공유 메모리 구현에서 생산자는 공유 메모리 객체를 구축하고 공유 메모리에 데이터를 쓰고, 소비자는 공유 메모리에서 데이터를 읽는다. Mach 메시지 전달 - ..
[이펙티브 자바 3/E] 아이템14 - Comparable을 구현할지 고려하라 - Comparable을 구현했다는 것은 그 클래스의 인스턴스들에는 자연적인 순서(natural order)가 있음을 뜻한다. 그래서 객체들의 배열을 Arrays.sort(a);와 같이 손쉽게 정렬할 수 있다. - 알파벳, 숫자, 연대 같이 순서가 명확한 값 클래스를 작성한다면 반드시 Comparable 인터페이스를 구현하자. - compareTo 메서드의 일반 규약은 equals의 규약(아이템 10)과 비슷하다. - compareTo 메서드로 수행한 동치성 테스트의 결과는 equals와 같아야 한다. - compareTo 메서드에서 관계 연산자 를 사용하는 이전 방식은 거추장스럽고 오류를 유발하니, 이제는 추천하지 않는다. => 박싱된 기본 타입 클래스들에 새로 추가된 정적 메서드인 compare를 이..
[이펙티브 자바 3/E] 아이템13 - clone 재정의는 주의해서 진행하라 - Cloneable을 구현하는 것만으로는 외부 객체에서 clone 메서드를 호출할 수 없다. - Cloneable 인터페이스는 놀랍게도 Object의 protected 메서드인 clone의 동작 방식을 결정한다. => 상위 클래스에 정의된 protected 메서드의 동작 방식을 변경한 것이다. - 가변 객체를 참조하는 클래스를 복제할 수 있도록 만들어보자. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; ... } - clone 메서드가 단순히 super.clone의 결과를 그대로 반환한다면 어떻게 될까? 반환된 Stack 인스..
Do it! 알고리즘 코딩테스트 with JAVA - (16) 그리디 알고리즘 그리디 - 현재 상태에서 보는 선택지 중 최선의 선택지가 전체 선택지 중 최선의 선택지라고 가정하는 알고리즘 핵심 이론 해 선택 : 현재 상태에서 가장 최선이라고 생각되는 해를 선택한다. 적절성 검사 : 현재 선택한 해가 전체 문제의 제약 조건에 벗어나지 않는지 검사한다. 해 검사 : 현재까지 선택한 해 집합이 전체 문제를 해결할 수 있는지 검사한다. 전체 문제를 해결하지 못한다면 1로 돌아가 같은 과정을 반복한다. 문제 풀이 https://yurison.tistory.com/572 [백준/자바] 11047 - 동전 0 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java..