본문 바로가기

Java9

[JAVA] Effective JAVA. 9장 일반적인 프로그래밍 원칙 1편(item 57, 58, 59, 60) 개요 회사 업무로 진행하는 이펙티브 자바 세미나 자료 내용이다. 책과 블로그를 참고하였으며, 자세한 코드는 여기서 확인할 수 있다. GitHub - cobinding/effective-java-semina: [JAVA] 인턴십 업무로 진행한 Effective-JAVA 세미나 코드 [JAVA] 인턴십 업무로 진행한 Effective-JAVA 세미나 코드. Contribute to cobinding/effective-java-semina development by creating an account on GitHub. github.com 9장은 내용이 많아서 1편과 2편으로 나누어서 포스팅할 예정이다. item 57. 지역변수의 범위를 최소화하라. 코드 가독성과 유지보수성을 위해 지역변수의 유효 범위를 최소.. 2024. 3. 24.
[JAVA] 날짜/시간 클래스 알아보기(Date, LocalDateTime, ZoneDateTime) 개요 회사에서 새로운 기능 추가를 위해 팀원 분이 Date를 쓴 것을 발견하였다. 이펙티브 자바 스터디에서 Date클래스는 사용을 지양해야 한다고 공부했기에 이 부분에 대해 자세한 기록을 남겨 곱씹어야겠다고 다짐했다. DATE java의 util 클래스다. 공식 문서를 살펴 보면, Date 클래스가 구현한 인터페이스는 다음과 같다. Serializable: 특별한 메소드를 포함하지 않는 마커 인터페이스다. 객체의 상태를 저장하거나(메모리에 존재하는 객체를 디스크에 저장) 네트워크를 통해 전송할 수있도록 바이트 스트림으로 변환하는 것이다. Clonable: 이또한 마커 인터페이스다. 객체를 복사할 때 사용된다. Comparable: Date의 compareTo 메소드를 지원하는 인터페이스다. DATE 클래.. 2024. 3. 8.
[Spring] 어노테이션 뜯어보기 1편. @RestController 개요 세미나를 진행하면서 동료 개발자 분께 배운 꿀팁인데 바로 자바나 스프링의 코드를 하나씩 뜯어보는 것이다. 내가 이 동료분한테 배우고 싶은 점은 하나를 알더라도 깊이있는 지식을 가지고 있고, 그래서 문제 상황이 발생했을 때 되게 논리적으로 추론이 가능하다는 점이었다. 이러한 지식의 근원은 코드를 뜯어보는 것에서 나왔다는 걸 알게되었다. 단순히 Java의 String이 어떤 구조이고... HashMap은 어떤 구조이고 이런 문제가 아니라 Java의 HashMap은 OOO로 구현되어있으며, OOO를 위해서 XXX를... 실제 구현체는 A와 같은 방식이므로... 이런 구조가 나오는게 문제해결능력에 아주 큰 기여를 하고있었다. 따라서 스프링 어노테이션, 자바 자료구조 뜯어보기를 연재하기로 결정했다. 자바도 .. 2024. 1. 13.
[JAVA] Effective Java. 6장 열거 타입과 애너테이션 개요 회사 업무로 진행하는 이펙티브 자바 세미나 자료 내용이다. 책과 블로그를 참고하였으며, 자세한 코드는 여기서 확인할 수 있다. GitHub - cobinding/effective-java-semina: [JAVA] 인턴십 업무로 진행한 Effective-JAVA 세미나 코드 [JAVA] 인턴십 업무로 진행한 Effective-JAVA 세미나 코드. Contribute to cobinding/effective-java-semina development by creating an account on GitHub. github.com item34. int 상수 대신 열거 타입을 사용하라 같은 그룹으로 묶이는 int 타입 상수들은 나열하지 말고, enum 클래스를 활용하자. 열거 타입은 그 자체가 클래스이.. 2024. 1. 12.
[JAVA] 익명 클래스(Anonymous Class), 람다식(Lambda) 개요 Effective Java 7장에서 등장하는 개념을 공부하기 위한 포스팅이다. 1-1) 익명 클래스(Anonymous Class) 프로그램에서 일시적으로 한번만 사용되고 버려지는 객체다. 분명히 Java Spring을 공부할 때는 코드의 재사용성을 고려하며 프로그래밍을 해야 좋은 개발자라고 배웠다. 그렇다면 재사용이 불가능하고 확장성도 좋지 않은 익명클래스를 왜 사용하는 걸까? 프로그램 내에서 일시적으로 사용되는 객체 처리에 사용한다. 확장성을 활용하는 것이 유지보수에서 더 불리할 경우에 사용한다. 해당 블로그 에서 이를 이해하기 위한 아주 좋은 예시를 들고 있다. 일부를 발췌해서 이해해보자. 1-2) 확장성이 필요없는 극단적인 예시 (출처) 곤충이라는 부모클래를 상속받는 거미 구현 클래스가 있다... 2023. 10. 22.
[spring] @Async와 SimpleAsyncTaskExecutor, TaskExecutor 그리고 thread pool @Async Asynchronous excution을 지원하는 스프링 어노테이션이다. 빈에 등록된 함수에 이 하지만 이러한 방식은 @Async 어노테이션을 적용하면 요청을 별도의 스레드(같은 Object data를 공유하는 스레드 중 하나)에서 실행한다. 이러한 Async 동작방식을 적용하여 호출자는 해당 메서드가 완료되는 것을 기다릴 필요가 없다. public interface EmailService { @Async void sendEmail(String template, Map properties); } → 위 예시에서 sendEmail 메소드는 별도의 스레드에서 실행된다. Spring’s @Async annotation, indicating that it should run on a separate.. 2023. 10. 11.
[JPA] 단방향 연관관계 매핑 | 테이블 중심 설계와 객체 지향 중심 설계 | Entity Mapping annatation으로 erd에 명시된 Entity와 Column들을 어떻게 JPA에서 선언하는지에 대해서 잘 배웠다. 그럼 이제 각각의 Entity에 대해서는 Ok니까 그 Entity 간의 관계를 표현해주는 코드를 구현해야 한다. 여기서부터는 객체지향적인 사고가 필요하다. 왜냐하면 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾지만, 객체는 참조를 통해 연관된 객체를 찾기 때문이다. Member와 Team이라는 두 Entity가 있다고 가정하자. Team은 여러 개의 Member 객체를 가질 수 있으므로 두 Entity간 관계는 다음과 같다. Member : Team = N : 1 이때 Member 엔티티 클래스와 Team 엔티티 클래스를 데이터 중심으로 모델링하여 연관관계를 찾으면 외래 키 식.. 2023. 5. 5.
[JPA] 기본 키 매핑 | PK 기본 키 매핑 @Id // pk 매핑 @GeneratedValue(strategy = GenerationType.AUTO) private String id; @GenerateValue 어노테이션에 위와 같은(strategy = GenerationType.AUTO) 세팅을 하면, db에서 말하는 auto ingredient가 설정된다. 이때 JPA 기본 설정 파일 persistence.xml의 속성에는 none이나 update로 설정해주어야 한다. (당연함 값을 자동으로 + 해주는 거니까) 💡 String 보다는 Int, Int 보다는 Long Identity 주로 MySQL에서 사용하는 방식으로 기본 키 생성할 때 데이터베이스에 같이 위임하는 것이다. auto_increment는 db에 INSERT SQ.. 2023. 5. 4.
[python] 리스트에 대해서 알아보자. 프로그래밍을 공부하는 사람이라면 한번 쯤은 알고리즘과 자료구조에 대해 들어보았을 것이다. 알고리즘은 특정 문제를 해결하기 위한 단계를 뜻하고, 자료구조는 컴퓨터 내에서 자료를 구조화하는 특별한 방식이다. 우리는 알고리즘과 자료구조를 통해 효율적인 프로그래밍을 할 수 있다! 자료구조의 한 종류인 리스트에 대해 알아보자. 1. 리스트란? 리스트는 기본적으로 리스트 상수이며, 어떤 변수에 할당된다. friends = ['Amy', 'Jack', 'Effy'] fruits이라는 변수는 3개의 문자열을 가지고 있는 것이다. 리스트는 컬렉션의 한 종류이다. 컬렉션: 하나의 변수에 여러 값을 넣는 것이 가능하도록 하는 것! 2. 리스트 선언 리스트의 각 항목들은 '[]'로 둘러싸이게 되며, 항목들에 대한 구분은 ,(.. 2022. 8. 13.