본문 바로가기

분류 전체보기80

자바 상속의 메모리 할당 과정 자바 상속의 메모리 할당 과정 최근 자바의 정석 상속 부분을 다시 읽으며 이해되지 않은 문장들이 있었고 이에 자바 상속의 메모리 할당 과정에 대해 조사하게 되었습니다. 이해한 내용을 바탕으로 제 생각이 더해진 내용을 적어 봅니다. 추가적으로 도움이 될만한 자료나 방향이 다른 내용은 댓글이나 방명록에 남겨주시면 감사하겠습니다 :) 아래 자바 코드가 메모리에 어떤 순서로 어디에 할당되는지 알아보도록 하겠습니다. public class Person { public int age; public String name; public Person() { System.out.println("parent class"); say(); } public void say() { System.out.println("Someone.. 2022. 9. 5.
JUNCTION ASIA 2022 후기 지난 8월 참석하고 싶었던 Junction Asia 해커톤에 다녀왔습니다. 어떤 후기를 작성할까 하다 현장감을 느낄 수 있는 사진을 올려봅니다. 해커톤 전체적인 모습이였습니다. 넓은 벡스코 공간에 책상들이 쭉 있었고 48시간동안 이 공간에서 해커톤이 이뤄졌습니다. 개회식 전 입장 시간에 디제잉 시간이 있었습니다. 개회식이었고 핀란드에서 오신 분입니다 ㅎㅎ 첫날 트랙 설명하는 시간인데요. 4개의 트랙이 있었고 어떤 것을 중점으로 보는지 필수 요건은 무엇인지 설명해주는 시간이였습니다. ZEP, Microsoft, AWS, Chainapsis 이렇게 4개 트랙이 있었습니다. 금요일 저녁 6시부터 일요일 저녁 6시까지 48시간동안 이어졌던 해커톤이었는데요. 중간에 뻐근한 느낌이 들 때쯤 요가 클래스가 있었고 앉.. 2022. 9. 3.
Java 상속, 오버라이딩, 다이나믹 메소드 디스패치 목차 자바 상속의 특징 super 키워드 메소드 오버라이딩 다이나믹 메소드 디스패치 (Dynamic Method Dispatch) 추상 클래스 final 키워드 Object 클래스 클래스 재사용 방법 상속 포함 Composit : 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언 자바의 상속(Inheritance) 상속을 받는 것은 조상 클래스를 확장(extend)한다는 의미로 해석할 수 있습니다. 기존 클래스를 재사용하여 새로운 클래스 작성 코드 중복은 일관성 유지를 어렵게 해 유지보수가 어려워지게 하는 요소입니다. 같은 내용의 코드를 부모 클래스 한 곳에서 관리하므로 공통된 내용이 변경될 때 부모 클래스 하나만 변경할 수 있습니다. 코드 재사용 코드 중복 제거 조상 클래스가 변경되면 자손 클.. 2022. 8. 29.
JVM과 자바 실행 과정 알아보기 자바 소스 파일(.java)을 실행하는 과정을 살펴보면서 JVM의 각 항목에 대해서 알아보았습니다. JVM에 대해 조사할 때 소제목으로 알아보는 것보다는 자바 실행 과정이라는 키워드로 접근하는 것이 수월했습니다. 먼저 java 파일의 실행과정을 간단하게 살펴보고 JVM의 각 항목에 대해 적어보겠습니다. .java 파일의 실행과정 (image : simplesnippets.tech) 1 컴파일 타임 🔷 1단계 : 코드 컴파일 javac abc.java 자바 컴파일러 javac를 통해 .java 파일이 바이트코드로 된 .class파일로 변환됩니다. 자바 컴파일러는 구문오류, 컴파일시간 오류를 확인하고 자바코드를 바이트코드로 변환합니다. 자바코드를 바이트코드로 변환할 때 발생한 에러를 컴파일 타임 에러라고 합.. 2022. 8. 7.
Java 데이터 타입, 변수, 배열 자바 데이터 타입, 변수, 배열 학습 목표 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다. 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언 및 초기화하는 방법 변수의 스코프와 라이프타임 타입 변환, 캐스팅 그리고 타입 프로모션 1차 및 2차 배열 선언하기 타입 추론, var 1 프리미티브 타입 종류와 값의 범위 그리고 기본 값 기본형 Primitive type char : 문자형, 문자의 유니코드(정수 2byte)가 저장된다. 그러므로 정수형, 실수형과 연산도 가능 int : 정수형. CPU가 가장 효율적으로 처리할 수 있는 타입, 대략 20억까지 표현 가능. long : 7~9자리 수 계산할 때는 넉넉하게 long(19자리)로 .. 2022. 7. 31.
코드스쿼드 부트캠프 학습 내용 부트캠프 코드스쿼드 백엔드 과정에서 배운 내용을 정리해두었습니다. 기간 2022.01 - 2022.07 주 기술 스택 Java, Spring Boot, JPA, MySQL Computer Science shell script 작성 DB procedure 작성 HTTP 요청/응답의 웹서버 구현 비동기 이벤트 처리 OOP - 순수 Java 프로젝트 로또를 순수 자바로 짝프로그래밍으로 구현함으로 협업과 OOP개념 구현을 통해 습득 Pull Request 리뷰 내용 웹 백엔드 프로젝트 주 기술스택 : Java11, Spring Boot2.7, JPA, MySQL (협업 프로젝트)airbnb 클론 프로젝트 (단독 프로젝트)Github Issue 클론 프로젝트 (단독 프로젝트)반찬가게 프로젝트 2022. 7. 19.
이슈트래커 프로젝트 회고 깃헙의 issue를 비슷하게 만들어 보는 프로젝트로 3주간 진행되면서 마지막 프로젝트였다. 이슈에는 레이블, 마일스톤, 코멘트등 연관된 도메인이 많아 JPA를 공부하기 좋은 프로젝트였다. 그리고 기존까지는 API가 업무 도메인에 초점이 맞춰져 있었다면 이슈트래커는 업무 도메인은 평범하나 CRUD가 반복되는 API작업이 많아 오히려 마음에 들었다. 첫 프로젝트인 todo를 하면서 반복되는 작업 속에서 전체 구조등 다시 리팩토링 해야하는 부분들이 생긴다는 것을 어렴풋이 느꼈기에 그런 부분들을 더 피부로 느끼면서 개발에서 어떤 것이 부족한지 더 공부해야 하는 영역은 어떤 것인지 직접 느껴보고 싶었다. JPA 익히기 JPA는 2번째 적용하는 것인데 처음부터 큰 도메인인 이슈 CRUD를 개발하려고 하니 시작이 지.. 2022. 7. 10.
airbnb 프로젝트 회고 airbnb 프로젝트 회고 에어비엔비 프로젝트를 마스터가 선정한 이유는 무엇일까 에어비앤비는 GPS로 인식되거나 사용자가 작성한 검색어 기반으로 검색 위치에서 가까운 숙소를 찾아준다. 공간 데이터를 다루게 되는데 일반적인 도메인과 다른 것은 카테고리 안에 속한 데이터를 보여주는 것이 아닌 위치 기반으로 반경을 설정하여 데이터를 추출한다. 반경 내에 있는 데이터는 어떻게 추출할 수 있을까? 이것이 이번 프로젝트의 업무 도메인이다. 예전에는 공간 데이터 추출을 위해 CLOB등의 데이터형태로 저장된 지도 데이터를 사용하였다고 한다. 이번 프로젝트를 통해서 데이터베이스에 공간정보를 저장하는 데이터 타입이 있다는 것을 알게 되었다. 새로운 도메인을 접하면서 내가 공부했던 과정과 겪은 어려움을 적어보려고 한다. 데.. 2022. 6. 19.
@GeneratedValue 기본키 전략 4가지 DB에 따라 기본키 생성 전략의 디폴트 값이 달라지기 때문에 MySQL을 기준으로 구현한면, 원하는 전략을 명시적으로 코드로 남겨두시길 추천한다. 결론 : AUTO 전략이 DB마다 다르게 채택되고, Mysql에서는 sequence가 따로 없기 때문에 table 전략이 결국 사용됨을 알았습니다. 조사하면서 table 전략은 사용 이유가 확실할 때만 사용하는 것이 좋을 것 같다고 생각했는데요. 지금의 경우 PK가 숫자로만 구성된다면 굳이 table로 PK가 관리되지 않아도 될 거라 판단합니다. @GeneratedValue 로 기본키 전략 4가지 1. IDENTITY 전략 사용법 : @GeneratedValue(strategy = GenerationType.IDENTITY) DB의 AUTO_INCREMENT를.. 2022. 6. 5.
@Embeddable 사용 이유와 장점 @Embeddable 사용한 이유와 장점 관련성이 있는 값들을 의미 있는 객체로 묶어서 관리하면서 객체의 응집도가 높아지는 효과를 기대하고 사용. 공유할 수 있는 객체 이면서 변경할 수 없도록(불변) 사용가능한 것이 @Embedded 타입의 장점이라고 생각합니다. import javax.persistence.Embeddable; @Embeddable public class Address { private String country; private String city; private String gu; } 2022. 6. 4.
JPA 엔티티 양방향 참조에 대한 생각 JPA 엔티티 양방향 참조에 대한 생각 양방향 참조에 대한 질문 양방향 참조를 걸어주신 이유가 있을까요? 양방향 참조를 걸어줄 필요가 없다면, 단방향 참조를 활용하시는 것이 좋습니다. 왜 그럴까요? 단방향 참조 외에 양방향 참조를 굳이 써야 할 경우가 있다면, 언제일까요? 엔티티 참조에 대한 내 생각 먼저 양방향 참조로 엔티티를 모두 작성하고 개발하였다. 이유는 모든 연관관계를 양방향으로 우선 두고, 기능을 개발하면서 하나씩 고민해나가는 방향으로 잡아가기로 했었기 때문이다. 일단 DB 기반으로 관계가 있을수 있다는 것을 표시하고 개발해 나가면서 해당 관계의 필요유무를 고민해 나가려고 했던 것이었다. 그러면서 참고자료의 내용을 읽어보면서 단방향 참조를 활용하는 것이 좋은 이유를 생각해보면, 올바르게 모델링.. 2022. 6. 4.
MySQL 초단위 precision 자릿수 넘어갈 경우 MySQL은 초단위 precision 자릿수 지정 SELECT COUNT(1) FROM mydate WHERE created_at BETWEEN '2022-05-27T00:00:00.000000' AND '2022-05-27T23:59:59.9999999'; 이렇게 조회하면 2022년 5월 28일 00시 00분 row가 DB에 들어가 있는 경우에, 나올 수 있다. 이유 해당 내용은 초단위 precision의 단위가 넘어갔을 때, 다음 시간을 표현하는 2022년 5월 28일 00시 00분이 포함되기 때문. ToDo 해당 내용은 조금 더 정리해보자 2022. 6. 3.