Java로 자료구조 이해하기 4편(Set)
2021. 10. 16. 18:50
Java
Set Collection interface의 구현체이다. HashSet 특징 순서가 없다. 중복이 안된다. 즉, 같은 객체가 없으면 저장하고 로또 생성기 같은거 만들 때 유용 Hash를 기반으로 하기 때문에 equals()와 hashCode()를 같이 오버라이딩 해주어야 한다. 참고(hasCode와 toString) HashSet Set 인터페이스를 구현한 컬렉션 클래스 순서를 유지하려면 LinkedHashSet 사용 TreeSet 이진 탐색 트리(binary ssearch tree)로 구현. 범위 탐색과 정렬에 유리 HashSet보다 데이터 추가 및 삭제는 느리다. 이진 트리는 모든 노드가 최대 2개의 하위 노드를 갖는다. binary라는 뜻이 2개라는 의미이므로 그렇다. 이진 탐색 트리 그림 부모 ..
인터페이스로 객체지향스럽게 다형성을 이용하여 중복 제거 하기
2021. 10. 14. 01:18
Java
인터페이스를 활용하여 중복된 소스 제거하기 우리는 평소 중복 코드를 많이 작성하고 있다. 이는 기본적으로 인터페이스의 활용할 줄 모르는 이유도 있습니다. 중복 코드를 제거하는 방법 중 한 가지가 인터페이스의 활용인데 그 방법을 설명하겠습니다. 인터페이스를 사용한다는 것은 변화되는 부분을 인터페이스로 추출한다는 의미입니다. 인터페이스로 추출해서 인터페이스로 파라미터를 받게 되면 구현체만 변경되면 중복을 제거할 수 있습니다. 즉, 클라이언트 코드는 구현체만 갈아 끼워주면 되는 것입니다. 핵심 로직은 클라이언트 코드가 알 필요가 없습니다. 즉, 인터페이스는 역할만 제공한다. 역할에 대한 책임은 구현체가 담당하는 것입니다. 인터페이스를 활용하여 다형성을 활용하게 됩니다. 인터페이스 활용 전 아래와 같이 모두 더..
JVM 동작 원리
2021. 10. 11. 14:49
Java
JVM이란 무엇인가? JVM(Java Virture Machine) 자바 가상 머신으로 자바 바이트 코드(.class 파일)를 실행할 수 있는 공간이다. 가상 머신이므로 어떤 OS에서도 독립적으로 실행이 가능하다. 핵심은 JVM은 OS 위에서 동작하게 되며, 자바 코드를 컴파일한 바이트 코드를 운영 체제가 이해할 수 있는 기계어로 변환하여 코드를 실행 시킨다. JVM 구성요소 1. ClassLoader 바이트 코드를 JVM이 운영 체제로 부터 할당받은 메모리 영역인 Runtime Data Area로 적재하는 역할 메모리를 할당 받았기 때문에 당연히 애플리케이션을 실행하면 수행된다. .java 파일을 javac.exe가 컴파일한 .class(바이트 코드)가 적재된다. 적재되는 시점은 Runtime시 적재된..
Arrays의 asList가 뭐고 왜 써야 할까?
2021. 10. 8. 01:15
Java
Arrays의 asList java8 API 문서에 보면 아래와 같이 나와 있습니다. 고정된 배열을 반환한다. 읽기 전용 배열을 반환한다 그래서 어떻게 사용하는 걸까? 아래와 같이 두 가지 방법으로 사용이 가능 합니다. 어떤 특징이 있을까? add, remove가 불가능하다(읽기 전용). AstractList 라는 추상 클래스의 add, remove를 상속받아 사용합니다. 아래 소스를 보면 불가능한 이유를 알 수 있습니다. UnsupportedOperationException 를 예외로 던지기 때문 입니다. 변경은 가능하다. AbstractList 에서 set 메서드는 add, remove와 동일한 예외를 발생 시키지만, AbstractList 를 상속받아 set 메서드를 오버라이드 하기 때문에 변경이 ..
hashCode와 toString
2021. 10. 5. 22:19
Java
hashCode() 객체의 해시코드를 반환하는 메서드 Object 클래스의 hashCode()는 객체의 주소를 이용해 int로 변환해서 반환 두 객체가 같은 객체인지 확인하기 위해 사용. Object 클래스에서 어떻게 구현 되어 있을까? native 메서드는 OS의 메서드이고, C언어로 작성되어 있음. body가 없는데 이는 이미 OS에서 작성된 기능이기 때문에 직접 만질 일이 없기 때문 입니다. 그래서 변경하기 위해 @Override를 해야 합니다. hashCode() 메서드 overriding 규칙 equals()를 overried하면, hashCode()도 overriding 해야 합니다. 왜냐하면, equals()의 결과가 true인 두 객체의 hashCode는 같아야 하기 때문 입니다..* 원래..
org.springframework.dao.InvalidDataAccessApiUsageException: No enum constant
2021. 10. 3. 14:46
Spring
org.springframework.dao.InvalidDataAccessApiUsageException: No enum constant 이번에 devlogmoa를 운영 중 위와 같은 에러가 발생 했습니다. 왜 발생 했을까? 메시지에 No enum constant에 나와 있듯 enum 상수가 없다는 의미입니다. 그런데 저는 분명 있었습니다. 코드는 위와 같습니다. 분명히 enum이 존재 했습니다. 하지만 저는 리팩토링을 하면서, enum의 Y -> USE, N -> UNSED로 변경 했습니다. 그래서 DB에 Member의 해당 컬럼이 Y, N으로 되어 있어서 위와 같은 에러가 발생했던 것입니다. 이 부분은 완전 처음 겪어보는 상황이었습니다. 휴~ 해결 방법 DB update!!!
devlogmoa 프로젝트 구조 정리 및 회고
2021. 10. 2. 23:10
Toy Project/devLogMoa
devlogmoa 링크 devlogmoa 이슈 정리 배포 방법 및 이슈 관리 이동욱님의 책 이 책을 보고 1년 전에 처음으로 자동화 배포를 알게 되었다. 그 때는 실습 개념이었기 때문에 모두 따라해 보았는데 정말 신세계였다. 이 책에서 나오는 배포 구조는 CI/CD를 이용 했는데 이 때 이 개념도 처음 알게 되었다. 구조는 CI는 TravisCI 배포는 AWS CodeDeploy 소스 저장소는 S3를 사용했다. 그리고 무중단 배포를 위해 ec2 앞에 nginx를 붙였다. 이 때 shell도 작성을 했는데 처음 작성 해보았다. 정말 큰 도움이 되었던 책이었고, 가볍게 볼 수 있지만, 넓게 알 수 있는 가장 좋은 책이었다. 초심자 누구에게나 추천하고, 중급자여도, 전반적인 흐름을 모른다면 추천할만한 책이다...
devlogmoa 이슈
2021. 10. 2. 21:17
Toy Project/devLogMoa
구글 oauth2 리다이렉션 400오류 XML에서 CDATA 문구는 무엇일까? (java) 쿠키와 세션 Java Serializable ec2에서 톰캣서버 포트 포워딩 하기 Gmail Smtp 534-5.7.14와534-5.7.9에러 스프링부트 캐시 정책 적용하기 싱글톤에서의 상태값 static메서드에 generic 사용 No enum constant