일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Database
- 디자인패턴
- 포인트클라우드
- 자바ORM표준JPA프로그래밍
- 영속성컨텍스트
- 아두이노
- persistance context
- 네트워크
- JPA
- 이펙티브자바
- 자바
- Hibernate
- MySQL
- Python
- Jetson
- 알고리즘
- 배달로봇
- Java
- 논문리뷰
- 딥러닝
- 자료구조
- DeepLearning
- cartograhper
- 파이썬
- 운영체제
- 프로그래머스
- 자율주행
- 논문
- Spring Batch
- 장애물인식
- Today
- Total
목록분류 전체보기 (56)
제리 devlog
자바의 다중 구현 매커니즘 : 인터페이스, 추상 클래스 자바 8부터는 인터페이스도 default 메서드를 제공할 수 있다. 인터페이스 vs 추상 클래스 공통점 선언 내용은 존재하지만 구현 내용은 없다(추상 메서드를 갖는다) 인스턴스로 생성할 수 없다. 목적 인터페이스 : 함수의 껍데기만 존재해서 구현을 강제한다. 구현 객체가 같은 동작을 하도록 보장한다. Has - A 추상 클래스: 추상 클래스를 상속 받아 기능을 이용하고 추가시킨다. Is - A 다중 상속 인터페이스 : 여러개의 인터페이스를 구현할 수 있다. 추상 클래스 : 여러 클래스를 상속 받을 수 없다. 책 본문 내용중 타입이라는 표현은 구현해야하는 메서드를 아울러 표현하는 것으로 이해했다. 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 ..
상속의 위험성 외부 클래스를 상속할 때의 위험성은 앞선 '상속보다 컴포지션을 사용하라'라는 게시글에서 다뤘다. 여기서 외부란 프로그래머 통제권 밖에 있어서 언제 어떻게 변경될지 모른다는 뜻이다. 예를 들어 Set, List같이 프로그래머가 직접 다루지 않는 클래스들을 말한다. 상속은 문서화를 요구한다. 메소드를 재정의하면 어떤 일이 일어나는지를 정확히 정리하여 문서로 남겨야한다. 즉, 상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지 문서로 남겨야한다. 상속용 클래스에서 재정의 가능한 메서드는 어떻게 동작하는지 문서화해야할 필요가 있다. 만약, 재정의 가능한 메서드가 내부의 다른 재정의 가능한 메서드를 호출해서 사용하는 상황이라면 기능이 오동작 할 수 있다. 재정의 가능한 메서드는..
상속은 코드를 재사용하는 강력한 수단이지만, 항상 최선은 아니다. 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만든다. 여기서 말하는 상속이란 클래스와 클래스 간에 상속(구현 상속)을 말하며 인터페이스를 구현하거나 인터페이스가 다른 인터페이스를 확장하는 상황과는 무관하다. 상속의 문제점 public class InstrumentedHashSet extends HashSet { //추가된 원소의 수 private int addCount = 0; public InstrumentedHashSet(int initCap, float loadFactor){ super(initCap, loadFactor); } @Override public boolean add(E e) { addCount++; return supe..
일대일 매핑(1:1) 일대일 관계는 양쪽이 서로 하나의 관계만 가진다. 예를 들어 회원은 하나의 사물함만 사용하고 사물함도 하나의 회원에 의해서만 사용된다. 일대일 관계는 그 반대도 일대일 관계이다. 테이블 관계에서 일대다, 다대일은 항상 다(N)쪽이 외래 키를 가졌다. 반면에 일대일 관계는 주 테이블이나 대상 테이블 둘 중 어느 곳이나 외래 키를 가질 수 있다. 주 테이블에 외래키 주 객체가 대상 객체를 참조하는 것처럼 주 테이블에 외래 키를 설정한다. 외래 키를 객체 참조와 비슷하게 할 수 있어 객체지향 개발자들이 선호한다. 주 테이블이 외래 키를 가지고 있으므로 주 테이블만 확인해도 대상 테이블과 연관 관계를 알 수 있다. 대상 테이블에 외래 키 전통적인 데이터베이스 개발자들은 보통 대상 테이블에 ..
자바의 명명 규칙은 크게 철자와 문법 두 범주로 나뉜다. 철자 규칙은 패키지, 클래스, 인터페이스, 메서드, 필드, 타입 변수의 이름을 다룬다. 철자 규칙은 특별한 이유가 없는 한 반드시 따라야한다. 그렇지않으면 API를 사용하기 어렵고 유지보수도 힘들다. (다른 프로그래머들이 코드를 읽기 어렵고 뜻을 오해하는 경우가 생길 수 있음) *철자 규칙 식별자 타입 예 패키지와 모듈 org.junit.jupiter.api, com.google.common.collect 클래스와 인터페이스 Stream, FutureTask, LinkedHashMap, HttpClient 메서드와 필드 remove, groupingBy, getCrc 상수 필드 MIN_VALUE, NEGATIVE_INFINITY 지역 변수 i, d..
저자는 최적화를 최대한 지양하라고 한다. 최적화는 좋은 결과보다는 해로운 결과로 이어지기 쉽고, 섣불리 진행하면 특히 더 그렇다. 성능 때문에 견고한 구조를 희생시켜서는 안된다. 빠른 프로그램보다 좋은 프로그램을 작성해야한다. 좋은 프로그램은 정보 은닉 원칙을 따른다. 그렇기에 개별 구성요소의 내부를 독립적으로 설계할 수 있다. 시스템의 나머지에 영향을 주지않고도 각 요소를 다시 설계할 수 있는 것이다. *정보 은닉 : 캡슐화에서 가장 중요한 장점으로 다른 객체에게 자신을 숨기고 자신의 연산을 통해서만 접근하게한다. 객체의 정보를 직접 꺼내오지 않으므로 유지 보수에 용이해진다. ex) 객체의 필드 명이 바뀐경우 혹은 특정 로직이 바뀐 경우 객체의 값을 꺼내 처리한 부분을 모두 찾아 수정해야함 public..
엔티티의 연관관계를 매핑할 때는 3가지를 고려해야한다. 다중성 단방향, 양방향 연관관계의 주인 먼저 두 엔티티가 일대일 관계일지 일대다 관계인지 다중성을 고려한다. 다음으로, 두 엔티티가 단방향과 양방향중 어떤 방식으로 참조하는지 결정한다. 마지막으로 양방향 관계라면 연관관계의 주인을 결정한다. 다중성 다대일(@ManyToOne) 일대다(@OneToMany) 일대일(@OneToOne) 다대다(@ManyToMany) 보통 다대일과 일대다 관계를 많이 사용하고 다대다 관계는 실무에서 거의 사용하지 않는다. 단방향, 양방향 테이블은 외래 키 하나로 조인을 하면 양방향으로 쿼리가 가능해서 방향의 개념이 없다. 반면, 객체는 참조용 필드가 있어 방향이 존재한다. 객체 관계에서 한 쪽만 참조하는 것을 단방향 관계라..
객체는 클래스가 아닌 인터페이스로 참조하라. 이 말이 무슨 뜻일까? //좋은 예 Set set = new LinkedHashSet(); //나쁜 예 LinkedHashSet set = new LinkedHashSet(); 객체를 생성할 때 LinkedHashSet으로 객체를 만들지만 업캐스팅을 사용하고있다. 업캐스팅을 사용하게되면 상위 인터페이스에 있는 구현체를 사용할 수 있지만 LinkedHashSet만이 가진 메서드를 사용할 순 없다. 인터페이스가 갖는 유연성 더 나은 성능이나 신기능을 사용하기위해 원래 구현했던 타입을 변경하는 경우가 있다. //좋은 예 LinkedHashSet -> HashSet으로 구현체를 변경해도 코드가 변하지 않음 Set set = new HashSet(); set.add(...