전체 글 96

우테코 프리코스 2주차 후기 + 공통 피드백 정리

2주차는 간단하게 나열 형식으로 이번에 지켰던 것과 다음 3주차때 추가적으로 지켜야 할 것들을 정리해 보려고 한다. 이번주차의 문제는 자동차 경주 미션이었다.(문제 및 코드는 아래에) 더보기 문제 https://github.com/minsang-alt/java-racingcar-6 GitHub - minsang-alt/java-racingcar-6 Contribute to minsang-alt/java-racingcar-6 development by creating an account on GitHub. github.com 코드 https://github.com/minsang-alt/java-racingcar-6/tree/minsang-alt GitHub - minsang-alt/java-racingca..

코드 품질 향상을 위한 제네릭(Generic) - 백기선 자바라이브스터디

제네릭이 제대로 사용하기 위해서 왜 사용하는 지 부터 알아보겠다. 제네릭 사용 이유와 이점 컴파일 타임에 타입 검사를 통해 예외 방지 제네릭은 JDK 1.5에 추가된 기능이다. JDK 1.5 이전에서는 여러 타입을 다루기 위해 Object 타입을 사용했었다. 하지만 Object로 타입 선언할 경우 반환된 Object 객체를 다시 원하는 타입으로 타입 변환을 해야 하며, 런타임 에러가 발생할 가능성도 존재한다. 아래 왼쪽 사진은 Object를 사용했을 경우 문제, 오른쪽은 제네릭을 사용했을 경우에 대한 예제 이다. 불필요한 캐스팅을 없애 성능 향상 위 사진 처럼 Object를 사용한다면 다운 캐스팅을 해야 하고 , 컴파일러는 타입검사를 추가적으로 진행해야 했다. 반면 제네릭은 미리 타입을 지정하거나 제한하..

공부방/JAVA 2023.10.30

Git Commit Message Conventions 번역 글

이러한 규칙은 AngularJS 커밋 규칙에서 채택되었다. 커밋 메세지 형식 커밋 메시지의 모든 줄은 100자를 넘으면 안된다. 제목(Subject line) 변경 사항에 대한 간결한 설명 허용 타입(type) feat (feature) fix (bug fix) docs (documentation) style (formatting, missing semi colons, ...) refactor test (when adding missing tests) 누락된 테스트 추가할 때 + 테스트 추가 chore (maintain) 빌드 테스트 업데이트 , 패키지 매니저를 설정하는 경우(프로덕션 코드 변경은 X) 명령형, 현재 시제 사용 첫 글자를 대문자로 쓰지 않는다 끝에 점(.) 없음 scope 커밋 변경 위치..

공부방/Git 2023.10.26

우테코 프리코스 1주차 후기

이 글을 쓰는 목적은 1. 앞으로 과제를 진행하는 데 1주 차에 지켰던 것을 2주 차에서도 까먹지 않고 다시 지키기 위해서. 2. 우테코에 떨어져도 4주간 몰입해서 공부했던 경험을 기록으로 남기고 싶어서다. 1주차의 프리코스가 끝이 났다. 이번 주차는 요구사항이 까다롭지 않았는데, '프리코스는 이런 거니 한번 경험해 봐'라는 체험의 의미로 여겼다. 항상 프로젝트를 진행하면서 구현에만 급급했던 난 이번 기회에 하고 싶은 것들을 다 해보겠다는 마음가짐으로 임하였다. 그리고 가장 중요한 요구사항만큼은 꼭 지키기로 마음먹고 일주일 동안 수십 번은 읽어본 것 같다.(그동안 요구사항 제대로 안 읽어서 점수 깎인 적이 많았기 때문에..) 이번주차의 문제는 숫자 야구 게임이었다. (문제 및 코드는 아래에) 더보기 문제..

대피소 csv파일 제작과정

8월 초 노션에 정리했던 글인데 블로그로 옮김. 사용자가 위치한 지역에 가까운 대피소를 클라이언트에 전송하기 위해 각 재난대피소 위치에 대한 CSV파일이 필요했다. 하지만 민방위 CSV파일 말고는 존재하지 않았다. 그래서 직접 CSV파일을 만들어본 경험을 적어본다. 문제 발생 https://www.safekorea.go.kr/idsiSFK/neo/main/main.html 이 사이트에 여러개가 존재한다. 그중 필요한건 이재민임시주거시설, 지진옥외대피소 안타깝게도 전체를 가져오는 건 불가능해 보인다 최소 시도선택과 시군구 선택 후 검색을 눌러야지 가져오는 걸로 보인다.(api요청할 때 그렇게 하도록 한 듯) 요청헤더를 보면 다음 url을 get요청하면 문제없이 가져오는 것을 postman으로 확인을 하였다..

@GetterSetter을 만들어보자

왜 @GetterSetter을 만들어보려 하나요? 어노테이션 프로세서를 공부하면서 직접 Lombok이 가지고 있는 기능인 @Getter와 @Setter을 만들어보고 싶다는 생각이 들었다.그리고 롬복이 어떤 방식으로 작동을 하는지 궁금증이 생겨 어노테이션을 직접 만들어보면서 동작방식을 이해위해 시작한 것이다. Lombok의 원리가 뭔지 모르면 먼저 이것부터. Lombok의 어노테이션들 중 @Getter을 예시로 들고 생각해보자. (롬복의 다른 어노테이션을 생각하고 봐도 상관없다) 컴파일타임때만 @Getter을 사용하고 있기 때문에 Javac의 이해가 먼저 필요하다. Javac의 컴파일 과정은 크게 3가지 과정을 거친다. 1단계 : 심볼 테이블 구문 분석 및 채우기 먼저 심볼테이블 파싱은 크게 두가지로 나뉜..

공부방/JAVA 2023.10.12

I/O - 백기선 자바라이브스터디

스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O 스트림이란 자바에서 어느 한 쪽에서 다른 쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 통로가 필요한데, 이것을 스트림(stream)이라고 정의한다. 스트림은 연속적인 데이터의 흐름을 물에 비유해서 붙여진 이름인데 여기서 마치 물이 한 쪽 방향으로 흐르는 것과 같아 스트림도 역시 단방향 통신만 가능하다. 즉, 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다. 따라서 양방향 통신을 위해 입력 스트림 출력 스트림 둘 다 필요하다. 입력스트림으로 바이트나 문자가 들어오는데 큐와 같이 FIFO 구조로 받아온다. 즉 먼저 보낸 데이터를 먼저 받게 된다. 버퍼란 I/O에서 입력 스트림과 출력 ..

공부방/JAVA 2023.10.10

Annotation 커스텀 하기 - 백기선 자바라이브스터디

애노테이션(annotation)은 사전에서 '주석' 이라고 정의한다. 주석은 /** .. */으로 표현을 하는데 이는 우리 개발자들이 소스코드를 보는 데 도움을 주는 주석이라면 애노테이션은 우리뿐 아니라 컴파일러에게 도움을 주기 위해 작성하는 주석이라고 볼 수 있다. 이번 글에서는 애노테이션을 이미 만들어진 built-in 애노테이션(@Override , @Deprecated , @SuppressWarnings , @SafeVarags)를 소개하는 것은 아니고 직접 애노테이션을 정의해보면서 이해를 해보도록 한다. @Override : 컴파일러에게 오바리이딩하는 메서드라는 것을 알린다. @Deprecated : 앞으로 사용하지 않을 것을 권장하는 대상에 붙인다. @SuppressWarnings : 컴파일러..

공부방/JAVA 2023.09.30

자바 리플렉션(Reflaction)

어노테이션의 개념을 공부하던 중 리플렉션이라는 개념이 어노테이션을 커스텀 할 때 꼭 필요하다는 것을 알게 돼 이번 기회를 통해 정리해본다. 리플렉션 이란? 리플렉(reflect)의 어원 : "반사하다/비치다" 리플렉션은 밑에 사진처럼 클래스를 직접 조작하는 것이 아니라 거울에 반사된 사람을 보고 클래스를 검사하고 조작하는 기술이라고 보면 된다. 리플렉션의 정의를 보면 런타임에 클래스와 인터페이스등을 검사하고 조작할 수 있는 기능 이라고 적혀있는데 JVM 아키텍처 관점에서 이해하면, 런타임 동안 JVM의 Method Area에는 정적변수를 포함한 모든 클래스 수준 데이터가 저장된다. 여기서 리플렉션이란 거울에 반사되는 사람이 곧 Method Area라고 보면 되고 이 영역을 보면서 클래스를 조작하고 검사한..

공부방/JAVA 2023.09.28

MySQL 서버가 설치된 디렉터리 찾는 방법 및 기본적인 설정 - Mac

1. Finder를 열고, 메뉴바에서 '이동 > 폴더로 이동..'을 선택한다. 2. 팝업 창에 '/usr/local/mysql'를 입력하고, "이동" 버튼을 클릭 그러면 Finder가 해당 위치로 이동하게 된다. MySQL 서버 디렉터리 구조 bin : MySQL 서버와 클라이언트 프로그램, 그리고 유틸리티를 위한 디렉터리 include : C/C++ 헤더 파일들이 저장된 디렉터리 lib : 라이브러리 파일들이 저장된 디렉터리 share : 다양한 지원파일들이 저장돼 있으며, 에러 메시지나 샘플 설정 파일(my.ini)이 있는 디렉터리 (열어봤지만 my.ini파일이 안보인다..? my.ini 파일말고 my.cnf로 저장되어 있다) 일반적으로 MySQL 서버는 단 하나의 설정 파일을 사용하는데, 리눅스를 ..

공부방/MySQL 2023.09.24