본문 바로가기

DEVELOP

[Java] 객체지향과 SOLID 객체 지향과 SOLID 소프트웨어 공학 내용이지만, 자바와도 연관성도 많으므로 자바 카테고리에 올리는 객체지향 정리. 객체 지향 객체지향은 컴퓨터 프로그램을 객체들의 모임으로 파악하고자 하는 관점. 각각의 객체는 데이터를 주고 받으며 협력한다. 프로그램을 유연하고 변경이 용이하게 만든다는 장점이 있다. 특징과 장점 특징 추상화: 현실세계의 개념을 반영하는 것. 객체들의 공통적인 특징, 데이터와 기능을 도출한다. ex) 요청한 계산을 수행하는 프로그램을 만든다고 했을 때, Calculator라는 이름의 클래스를 만든다. 실제 계산기라고 생각하고 기능을 구현한다. 인간의 사고방식과 프로그램의 동기화. 캡슐화: 객체의 역할을 수행하기 위한 하나의 목적을 위해 데이터와 기능들을 묶는 것 ex) Calculato.. 더보기
[Java] MyBatis #과 $의 차이 [Java] MyBatis #과 $의 차이 서론 약 2년 6개월 전 처음 취업을 하고 MyBatis를 사용해봤다. 데이터베이스에 접근하는 도구, 정도로만 인식을 하고 딱히 알아볼 생각을 안 했었다. 데이터베이스를 공부하겠다고 해도 오라클이나 SQL만 생각했었다. 약 6개월 전 처음 이직 면접을 봤는데, 생각도 못한 질문이 나왔다. MyBatis에서 #이랑 $의 차이가 뭐에요? 사실 회사에서는 바인딩을 할 때 #만 사용했었지, $를 본 적이 없어서 전혀 고민해본 적이 없었다. 면접이 끝나고 알아봐야지 하는 생각만 하고, 면접이 끝나고 알아보지 않았다. 그리고 약 한 달 뒤, 다른 기업의 면접을 보게 되었다. 첫 면접의 경험을 바탕으로 이전보단 질문에 잘 대답했었던 것 같다. 그러던 중 아차, 똑같은 질문이.. 더보기
[Github] 398일간의 1일 1커밋 회고 398일간의 1일 1커밋 회고 빈틈없이 잘 가꿔진 잔디밭 만들기 2018년에 깃허브의 '잔디밭'이라는 걸 처음 들었을 때부터 한 번 해보고 싶었다. 몇 번 시도해봤지만 쉽지는 않았다. 그러나 결국 성공했고, 1년하고 한 달만에 프로젝트(?)를 종료하게 되었다. 그리고 정리해보는 회고록. When 2020년 6월 7일 ~ 2021년 7월 9일 정확히 398일. 위 이미지는 2021년 7월 3일에 찍었다. Who 1일 1커밋을 시작하는 시점에서의 나는? 14개월 경력의 주니어 백엔드 개발자. 업무적으로 자바, 스프링, 오라클을 주로 사용했다. 주문개발팀에서 제휴 API를 담당하고 있었다. 경제학 전공, 유학동양학을 복수전공한 비전공 출신 개발자. 1일 1커밋을 종료한 시점에서의 나는? 27개월.. 더보기
[Java] String의 equals()와 hashcode() [Java] String의 equals()와 hashcode() String 생성 방법 1. 리터럴 String a = "12345; 2. new 연산자 String b = new String("12345); 리터럴과 new 연산자 방식의 차이 리터럴로 생성된 객체는 String Constant Pool 영역에 존재 리터럴은 내부적으로 String의 intern() 메소드를 호출. intern()은 해당 문자열이 String Constant Pool에서 검색 후 주소값 반환 또는 생성 new 연산자로 생성된 객체는 Heap 영역에 존재한다. equals()와 ==의 차이 .equals()는 값 비교, ==은 주소값을 비교한다. hashCode 각 객체의 주소값을 변환하여 생성한 고유의 주소값 .equal.. 더보기
[Spring Boot] @Transactional 어노테이션의 롤백 테스트 [Spring Boot] @Transactional 어노테이션의 롤백 테스트 스프링의 @Transactional 어노테이션, 언제 커밋이 되고 롤백이 되는가. 중요한 것도 알고 개념도 알겠는데 와닿지가 않아서 직접 테스트 후 정리해봤다. Checked vs Unchecked Throwable Exception Checked Exception Unchecked Exception Error 이 포스팅의 목적은 @Transactional이 롤백 수행을 직접 확인해보기 위함이다. 따라서 익셉션의 종류에 대한 설명은 생략한다. 결론만 얘기하면 @Transactional로 묶인 메소드는 기본적으로 Unchecked Exception과 Error가 발생하면 DB 작업 내역을 롤백한다. 별도의 설정을 통해 롤백 기준을.. 더보기
[Spring Boot] IntelliJ IDEA에서 Spring Boot 프로젝트 생성 [Spring Boot] IntelliJ IDEA에서 Spring Boot 프로젝트 생성 가볍게 정리해두는 인텔리제이 스프링부트 프로젝트 생성 방법 STEP 1: 시작 화면 인텔리제이 열기 NEW PROJECT 버튼 클릭 STEP 2: Project SDK 세팅 좌측 탭에서 Spring Initializr 선택 Project SDK에서 원하는 버전 선택 Default 선택 후 NEXT 버튼 클릭 STEP 3: 프로젝트 세팅 Group Artifact Maven || Gradle 선택 Java || Kotlin || Groovy 선택 Jar || War 선택 [MEMO] Jar와 War의 차이 JAR: 스프링부트의 내장 톰캣을 이용 WAR: 외부 톰캣을 이용 STEP 4: Dependencies 세팅 필요.. 더보기
[Java] JVM Garbage Collector [Java] JVM Garbage Collector JVM, 자바 가상 머신이란? Java Virtual Machine 운영체제의 메모리 영역에 접근하여 메모리를 관리하는 프로그램 메모리 관리, Garbage Collector 수행 GC, Garbage Collector란? 동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지 및 해제 하는 기능 Stack 정적으로 할당한 메모리 영역 primative 타입의 데이터가 값과 함께 할당 Heap 영역에 생성된 Object 타입의 데이터의 참조 값 할당 Heap 동적으로 할당한 메모리 영역 모든 Object 타입의 데이터가 할당 Heap 영역의 Object를 가리키는 참조 변수가 Stack에 할당 GC 프로세스 MARK Stack의 모든 변수를 스캔하면.. 더보기
[Algorithm] 2019 카카오 블라인드 테스트 문제풀이 - 무지의 먹방 라이브 [Algorithm] 2019 카카오 블라인드 테스트 문제풀이 - 무지의 먹방 라이브 문제 * 효율성 테스트에 부분 점수가 있는 문제입니다. 평소 식욕이 왕성한 무지는 자신의 재능을 뽐내고 싶어 졌고 고민 끝에 카카오 TV 라이브로 방송을 하기로 마음먹었다. 그냥 먹방을 하면 다른 방송과 차별성이 없기 때문에 무지는 아래와 같이 독특한 방식을 생각해냈다. 회전판에 먹어야 할 N 개의 음식이 있다. 각 음식에는 1부터 N 까지 번호가 붙어있으며, 각 음식을 섭취하는데 일정 시간이 소요된다. 무지는 다음과 같은 방법으로 음식을 섭취한다. 무지는 1번 음식부터 먹기 시작하며, 회전판은 번호가 증가하는 순서대로 음식을 무지 앞으로 가져다 놓는다. 마지막 번호의 음식을 섭취한 후에는 회전판에 의해 다시 1번 음식.. 더보기