이론

    상수와 static final

    상수는 어떤 것일까? 사용하는 모두에게 같은 값이어야함. 값이 변하지 않아야 함. 왜 상수를 선언할 때 static final 키워드를 붙일까? static의 의미 static이 아닌 데이터들은 런타임 시점에 동적으로 메모리에 할당되는데 static 키워드가 붙은 데이터는 컴파일시점에 가비지컬렉터의 관리 밖인 static영역에 할당되므로 실행 직후부터 끝날때까지 쭉 유지됨 final의 의미 초기화를 한번만 허용한다는 의미. 즉, 한번 초기화되면 더 이상 초기화할 수 없다. 의문이 생겼던 부분 그럼 final만 붙어도 상수아닌가? 왜 static까지 붙여줘야 하지? final 만 있으면 모두에게 같은 값이라는 것을 보장할 수 없다! A와 B라는 사용자가 C변수에 final 키워드를 줬다고 해보자. 초기화 ..

    [Spring Boot] SpringApplication 파일 위치

    프로젝트를 하다가 SpringApplication 파일 위치를 바꾸어 오류가 났던 경험이 있다. 간단한 오류이지만 한번 정리해본다. 클래스 명은 사용자의 설정에 따라 달라지지만 파일 코드의 큰 틀은 아래와 같다. @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } @SpringBootApplication 어노테이션을 통해 스프링 빈을 읽어와 자동으로 생성해준다. 기본 설정으로 이 파일이 있는 위치부터 찾아 읽어가기 시작하므로 따로 설정을 해줄 것이 아니라면 프로젝트의 최상단에 위치해주는 것이 좋다.

    MySQL ERROR 1045 (28000): Access denied for user 'root' @'localhost ' (using password: YES) 오류 해결

    로컬 서버에서 MySQL을 접속하려고 하였는데 위와 같이 에러가 났다. ERROR 1045 (28000): Access denied for user 'root' @'localhost ' (using password: YES) 이 에러는 비밀번호가 틀렸을 때 발생하는 에러인데 나는 분명히 권한도 제대로 주었고 비밀번호도 확실하게 확인하여 제대로 적었는데 왜 오류가 난지 도통 이유를 알 수 없었다. 2일 가량을 MySQL을 삭제하고 다시 깔아도 보는 등의 수 많은 시도를 해봤지만 결국 해결하지 못했었다. 그러다가 머리 속에 127.0.0.1로 접근하는 와중에 문제가 생긴 게 아닐까라는 생각을 스쳐지나갔고 그것이 맞았다. netstat -ano 명령어를 통해 port를 확인해보았고..

    최단 거리 알고리즘 - 다익스트라 [Java]

    목차 1. 서론 2. 작동원리 3. 구현 1. 서론 다익스트라 알고리즘은 한 정점에서 다른 정점들까지의 최단 거리와 경로를 구하는 알고리즘이다. 단, 간선의 거리 정보는 항상 0 이상이어야 한다. 2. 작동원리 1. 방문하지 않은 정점 중 가장 시작점으로부터 거리가 짧은 정점으로 이동한다. 이 때, 해당 정점까지의 최단 거리는 확정된다. 2. 현재 정점과 인접한 모든 정점들 중 방문하지 않은 정점들을 돌면서 거리를 갱신시켜준다. 즉, 현재 정점까지의 최단 거리를 A, 현재 정점과 인접한 정점 V를 잇는 간선의 거리를 B, 현재까지 구한 V까지의 최단거리를 C라고 했을 때, A+B < C 이면 V까지의 최단 거리를 A+B로 갱신해준다는 의미이다. 위 과정을 아래에서 그림으로 한번 살펴보자. 아래 그림은 영..

    final 키워드 헷갈리는 부분 정리

    private final Map store = new HashMap();위와 같은 코드가 있다고 했을 때, store가 가리키는 실제 데이터들이 바뀌면 안된다고 잘못 생각하고 있었다. 원시 타입 변수의 경우 값이 스택에 저장되고, 객체 타입은 주소는 스택에 값은 힙에 저장된다. store가 무엇을 가리키는지 즉, 가리키는 주소가 바뀌면 안된다는 것이지 힙 안의 값이 바뀌는 것은 상관이 없다. 힙 안의 값도 불변이길 원한다면 Collections.unmodifiableMap() 를 이용해보자. final을 값이 변하지 않는다고 이해하지 말고, 한번만 할당할 수 있다고 이해하자.