Programming 33

Java의 Switch: 14 이후 추가된 기능

들어가기 전에 JDK 14에 들어서면서 Switch Expression이라는 표현이 추가되었다. Switch Statement는 전통적인 switch 구문으로, 여러가지 경우를 검사하고 지시를 수행하는 동작을 수행한다. 값을 반환하지 않고 주로 프로그램의 흐름을 제어한다. 반면 14에서 추가된 switch expression은 각 case 값을 반환하며, 이 값을 변수에 할당할 수 있다: Expression과 statement의 차이점은 다른 문서에서 살펴보자. 1. Arrow Labels 원래 java의 switch는 case문의 종료를 break를 통해서 진행했어야 했다: switch (day) { case MONDAY: case FRIDAY: case SUNDAY: System.out.println..

Programming/Java 2023.11.22

WSL 2(Windows) C/C++ 개발환경(VS Code + GDB)

Krafton Jungle과 KRISS에서 배운 알고리즘과 자료구조, CS 관련 내용의 실습을 위해 C/C++ 개발환경 구축 한 내용을 정리하였다. Windows 11, WSL2 , Ubuntu 22.04, Visual Studio Code, GDB 사용. Windows에서 1.Visual Studio를 사용하거나 2.AWS EC2 서비스를 개발환경으로 사용할 수도 있지만 의 경우, 무거운 VS를 사용하기 싫었고, 윈도우 시스템 엔지니어가 될 것도 아니고, 아무래도 보편적으로 서버로 사용하는 Linux 환경의 개발을 하는 것이 나아보인다. 나는 지금 나가는 AWS나가는 돈도 아까운데... 나한텐 커피값이 더 귀함....ㅎ GDB의 사용이 아직 익숙하지는 않지만 그런대로 빌드하고 사용하는데에는 크게 문제는..

Programming/C & C++ 2023.11.21

올리면 안되는 파일을 공개 리포지터리에 올려버렸다!

공개 레포지터리에 올리지 말아야하는 파일을 push한 경우에는 어떻게 해야하지? 문제 발생 프로젝트를 다시 빌드해보는 과정에서 application.yml을 파일이 업로드하고 말았다. 당황한 나머지 해당 파일을 삭제하고 다시 push 했지만 저장소 커밋 로그에는 그대로 남아 있는 상황. roadmap 브랜치에서 PR 후 머지까지 해 버린 것이다. 상황 1. application.yml에는 db 접속 키와 gpt api 키가 있었는데, Github에서 제공하는 submodule 기능을 사용해서 공개 리포지터리에서 분리시켜 보조 리포지터리(당연히 private)에 저장하여 해결하였다. 2. 팀프로젝트로 진행할 때는 resources 디렉터리를 전부 submodule로 등록하여 빌드 시에 해당 디렉터리를 su..

Programming/Git 2023.10.22

포인터 & 배열 + 포인터 연산

크래프톤 정글에서 포인터 공부했던 내용을 정리하는 글입니다. 배열배열(영어: array, 配列·排列, 문화어: 배렬)은 번호(인덱스)와 번호에 대응하는 데이터들로 이루어진 자료 구조를 나타낸다. 포인터포인터(pointer)는 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수를 말한다. 포인터가 가리키는 값을 가져오는 것을 역참조라고 한다. 그 포인터가 가르키는 공간의 값을 가져오는 것을 역참조라고한다. 32 바이트 환경에서 C언어의 포인터는 4 바이트이며, 64 바이트 환경에서는 8 바이트이다.포인터 표기포인터의 선언int* p; // int형 데이터를 가르키는 포인터 선언: 초기화하지 않음 포인터의 역참조int a = *p; // p의 위치에 있는 값을 a로 복사 주소 연산: &int s =..

Programming/C & C++ 2023.10.19

Static

코드를 작성하다 (바보같이) 간과하고 넘어갔던 부분에 대해 궁금증이 생겨서 조금씩 공부해보기로 했다. of 메서드를 static으로 사용하는 이유는? 둘 다 비슷한 용도로 사용하는데, toEntity 메서드와 달리 of 메서드는 static으로 되어 있다. @Getter @Builder @ToString @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor public class RoadmapViewportDto { private BigDecimal x; private BigDecimal y; private BigDecimal zoom; public RoadmapViewport toEntity() { return RoadmapViewp..

Programming/Java 2023.10.17

JPA | BaseTimeEntity: 생성/수정 시간 자동 설정

BaseTimeEntity 모든 Entity의 상위 클래스에서 createdDate, updateDate를 자동으로 관리해 줌. Date자료형보다 LocalDate, LocalDateTime을 사용할 것을 추천. BaseTimeEntity 추상클래스를 구현하고 Entity 클래스들에게 상속시켜 사용한다. BaseTimeEntity 추상클래스 @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) // Auditing 기능 포함 public abstract class BaseTimeEntity { @CreatedDate @Column(updatable = false) private LocalDateTime createdDate; @..

Programming/Spring 2023.10.09

Spring

Spring Framework Java 플랫폼을 위한 오픈소스 프레임워크 경량 컨테이너: 자바 객체를 직접 관리하며, 객체 생성/소멸과 같은 라이프사이클을 관리한다. POJO(Plain Old Java Object)방식의 프레임워크: 일반적인 J2EE 프레임워크에 비해 구현을 위한 특정 인터페이스를 구현하거나 상속 받을 필요가 없어 기존 라이브러리를 지원하기에 용이하고 객체가 가볍다. 제어 반전(IoC: Inversion of Control): 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어, 필요에 따라 스프링에서 사용자의 코드를 호출한다(라이브러리와는 반대: 라이브러리의 경우 사용자의 코드가 필요에 따라 라이브러리의 코드를 호출한다). 의존성 주입(DI: Dependency Injection): ..

Programming/Spring 2023.10.09

01 | 기본 문법 | 변수와 리터럴

키워드(keyword) Java 언어에서 정한 예약어 변수명 하나 이상의 글자 첫번째 글자는 문자, '$', '_' 그 이후 글자는 문자, '$', '_', 숫자 길이 제한 없음 키워드는 변수명으로 사용할 수 없음 Primitive Type 기본형 타입은 모두 정해진 메모리 크기를 가지고, 주어진 메모리 안에 그 값을 저장한다. 예: int 정수 하나를 저장하기 위해 메모리에 4 byte가 필요. int i = 1; 메모리 4 byte를 i로 칭하고 정수를 저장한다는 뜻이다. 정수 리터럴(literal) 1을 i 라는 메모리 공간에 저장한 것이다. Literal이란 변수에 입력되는 값 자체. 이 4byte메모리에 숫자 1이 2진수로 저장된다. short: 2 byte, long: 8 byte float,..

Programming/Java 2023.10.04

00 | Java의 동작: Hello.java

기초(노션) JAVA는 객체 지향 언어. 플랫폼에 독립적이다. 느리지만, 버전 업 되면서 다른 언어들의 장점을 흡수하고 있다.(모던 자바) 람다: 함수형 프로그래밍 Stream API: 람다 표현식과 메서드 참조 등의 기능과 결합하여 매우 복잡하고 어려운 데이터 처리 작업을 쉽게 조회하고 필터링하고 변환하고 처리할 수 있도록 한다. 병렬 프로그래밍: 여러 개의 CPU 코어에서 작업을 배분해서 동시에 작업을 수행한다. 클래스 class 이름은 파일 이름과 동일해야 한다. 첫 글자는 무조건 대문자. public class Hello{ ... } 메서드 클래스는 필드(Field)와 메서드(Method)를 가질 수 있다. 프로그램 실행이 시작되는 시작점: main 메서드 public static void mai..

Programming/Java 2023.10.04