일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 포인트클라우드
- 운영체제
- 자율주행
- Jetson
- Hibernate
- 알고리즘
- 네트워크
- Java
- JPA
- 이펙티브자바
- 논문
- cartograhper
- 논문리뷰
- MySQL
- 영속성컨텍스트
- DeepLearning
- 디자인패턴
- persistance context
- Spring Batch
- 아두이노
- Database
- 장애물인식
- 자바ORM표준JPA프로그래밍
- 배달로봇
- Python
- 자바
- 자료구조
- 프로그래머스
- 딥러닝
- 파이썬
- Today
- Total
목록Java (19)
제리 devlog

상속은 코드를 재사용하는 강력한 수단이지만, 항상 최선은 아니다. 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만든다. 여기서 말하는 상속이란 클래스와 클래스 간에 상속(구현 상속)을 말하며 인터페이스를 구현하거나 인터페이스가 다른 인터페이스를 확장하는 상황과는 무관하다. 상속의 문제점 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..
자바의 명명 규칙은 크게 철자와 문법 두 범주로 나뉜다. 철자 규칙은 패키지, 클래스, 인터페이스, 메서드, 필드, 타입 변수의 이름을 다룬다. 철자 규칙은 특별한 이유가 없는 한 반드시 따라야한다. 그렇지않으면 API를 사용하기 어렵고 유지보수도 힘들다. (다른 프로그래머들이 코드를 읽기 어렵고 뜻을 오해하는 경우가 생길 수 있음) *철자 규칙 식별자 타입 예 패키지와 모듈 org.junit.jupiter.api, com.google.common.collect 클래스와 인터페이스 Stream, FutureTask, LinkedHashMap, HttpClient 메서드와 필드 remove, groupingBy, getCrc 상수 필드 MIN_VALUE, NEGATIVE_INFINITY 지역 변수 i, d..

저자는 최적화를 최대한 지양하라고 한다. 최적화는 좋은 결과보다는 해로운 결과로 이어지기 쉽고, 섣불리 진행하면 특히 더 그렇다. 성능 때문에 견고한 구조를 희생시켜서는 안된다. 빠른 프로그램보다 좋은 프로그램을 작성해야한다. 좋은 프로그램은 정보 은닉 원칙을 따른다. 그렇기에 개별 구성요소의 내부를 독립적으로 설계할 수 있다. 시스템의 나머지에 영향을 주지않고도 각 요소를 다시 설계할 수 있는 것이다. *정보 은닉 : 캡슐화에서 가장 중요한 장점으로 다른 객체에게 자신을 숨기고 자신의 연산을 통해서만 접근하게한다. 객체의 정보를 직접 꺼내오지 않으므로 유지 보수에 용이해진다. ex) 객체의 필드 명이 바뀐경우 혹은 특정 로직이 바뀐 경우 객체의 값을 꺼내 처리한 부분을 모두 찾아 수정해야함 public..

객체는 클래스가 아닌 인터페이스로 참조하라. 이 말이 무슨 뜻일까? //좋은 예 Set set = new LinkedHashSet(); //나쁜 예 LinkedHashSet set = new LinkedHashSet(); 객체를 생성할 때 LinkedHashSet으로 객체를 만들지만 업캐스팅을 사용하고있다. 업캐스팅을 사용하게되면 상위 인터페이스에 있는 구현체를 사용할 수 있지만 LinkedHashSet만이 가진 메서드를 사용할 순 없다. 인터페이스가 갖는 유연성 더 나은 성능이나 신기능을 사용하기위해 원래 구현했던 타입을 변경하는 경우가 있다. //좋은 예 LinkedHashSet -> HashSet으로 구현체를 변경해도 코드가 변하지 않음 Set set = new HashSet(); set.add(...

+ 연산으로 계산한 경우 10만개의 "abcd"를 붙였다. public static void main(String[] args){ long startTime = System.currentTimeMillis(); String result = ""; for(int i=0; i

자바에서 제공하는 두 가지 객체 소멸자를 제공한다. 1. finalizer 2. cleaner 두 가지 객체 소멸자를 사용하면 c언어처럼 명시적으로 메모리를 해제할 수 있을까? -> 곧바로 메모리를 해제하는 것은 불가능하다. finalizer는 예측할 수 없고 상황에 따라 위험할 수 있어 일반적으로 불필요함. 나름에 쓰임새가 있지만 기본적으로는 쓰지 말아야 한다(자바9부터 deprecated) cleaner는 자바9부터 finalizer를 대신 제시됨. cleaner는 finalizer보다는 덜 위험하지만, 여전히 예측할 수 없고, 느리고, 일반적으로 불필요함 C++에서는 파괴자(destructor)가 존재한다. 특정 객체를 생성하는 생성자와 대척점으로 자원을 회수하는 보편적인 방법. JAVA에서는 가비..
많은 클래스가 하나 이상의 자원에 의존한다. 의존이라는 용어는 spring을 경험해봤다면 흔히 들었을 것이다. 하지만 의존 관계에 대해서 다시한번 짚어보고 자원을 명시하지 말고 의존 객체 주입을 사용하라는 의미를 생각해보자. 의존 관계는 어떤 것인가? 하나의 예시를 보자 public class Car(){ Wheel wheel = new SmallWheel(); public Car(){}; } public class SmallWheel extends Wheel(){ String modelName = "A"; int size = 50; public SmallWheel(){} } 두개의 클래스가있다. Car클래스는 SmallWheel을 입력받아 사용한다. 이때 Car객체는 SmallWheel과 의존 관계가 ..

이번 item은 책 분량상 약 1쪽이 조금 넘는 분량이기 때문에 다루는 내용이 굉장히 간략하다. 따라서 자주 등장했던 static의 개념도 추가로 다뤄 보고자한다. 책의 도입부는 이렇게 시작된다. "단순히 static 메서드와 static 필드만을 담은 클래스를 만들고 싶은 때가 있을 것이다. 객체 지향적으로 사고하지 않는 이들이 종종 남용하는 방식이기에 그리 곱게 보이지는 않지만, 분명히 나름 쓰임새가 있다. 예컨데 java.lang.Math, java.util.Arrays처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓을 수 있다." 여기서 객체 지향적인 사고란 어떤 것을 의미하는지 생각해보기전 static의 특성에 대해 생각해보자. new 키워드를 통해 생성된 객체는 heap영역에 생성되고 GC에..