전체 글 74

[객체지향의 사실과 오해] 4. 역할, 책임, 협력

객체의 모양을 빚는 것은 객체가 참여하는 협력이다. 개별적인 객체의 상태나 행동이 아니라 객체들간의 협력에 집중하라!!! 협력 한 객체가 자신의 책임으로 해결할수 없을 때 다른 객체에게 도움을 받기 위해 요청을 한다. 이 객체는 또 자신의 책임으로는 해결할수 없을 때 다른 객체에게 요청을하고, 또 그 객체는 요청한다. 그리고 요청받은 객체는 응답한다. 이런 요청과 응답의 연쇄적인 흐름이 바로 협력이다. 협력은 연쇄적인 요청과 응답의 흐름으로 구성된다. 책임 객체가 어떠한 요청에 대해 대답할수 있거나 적절한 행동을 할 의무가 있는 경우 해당 객체는 책임이 있다고 한다. A객체가 B객체에게 요청을 전송할 경우에만 B객체는 책임을 수행한다. 즉, 다른 객체가 책임을 수행하도록 요청을 보내는 것을 메시지 전송이..

study with book 2021.08.20

[OS] 운영체제 Deadlock

교착상태인 Deadlock에 대해서 알아보자. 교착상태 그림과 같이 차가 도로에서 너무 막혀서 가고 싶은 곳으로 갈수가 없다. (어떠한 차도) 프로세스 관점에서 본다면 차가 프로세스이고 가고싶은 도로가 자원이면 프로세스들이 자원을 할당받지못해 작업을 수행하지 못하는 상태를 의미한다. 이것이 교착상태, deadlock이다. 교착상태 개념 프로세스 상태전이도에서 blocked/asleep상태의 프로세스는 프로세서를 할당받아 작업을 수행중 어떠한 자원이 또필요하여, (혹은 이벤트가 필요하여) 프로세서를 반납하고 자원을 대기하는(이벤트를 대기하는) 상태의 프로세스인데 이 때 영영, 영원히 자원을 받을 가능성이 없는 프로세스를 교착상태에 빠졌다 한다. 교착상태에 빠진 프로세스가 있는 시스템을 시스템이 deadlo..

computer science 2021.08.20

백준 1987(JAVA)

문제 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다. 좌측 상단에서 시작해서, 말이 최대한 몇 칸을 지날 수 있는지를 구하는 프로그램을 작성하시오. 말이 지나는 칸은 좌측 상단의 칸도 포함된다. 풀이 무지성으로 bfs로 했다. 문제를 자세히 살피지못하고.. 이문제는 무조건 깊이우선탐색 dfs로 풀어야한다.!!! 왜 그런지 알아보자. 같은 알파벳을 두번 지날수가없다. 즉, 한번 ..

algorithm 2021.08.10

백준 2589(JAVA)

문제 보드위에는 육지와 바다가있는데 육지에서 육지로만 갈수있고 현재위치에서 상하좌우 밖에움직이지 못한다. 이 보드위에 보물이 두군데 묻혀있는데 보물은 최단거리중 가장 긴 시간이 걸리는 곳에 묻혀있다. 보물 지도가 주어질 때, 보물이 묻혀 있는 두 곳 간의 최단 거리로 이동하는 시간을 구하는 프로그램을 작성하시오. 풀이 최단거리리라는 것이 무엇인지 문제에 주어져있다. 이 문제를 보고 bfs로 바로 풀어야겠다는 생각이 난들었다. (가중치없는 최단거리이동은 bfs이다.) bfs가 어떤식으로 그래프를 탐색하는지 생각하면 어렵지않게 생각할수있는 문제이다. 보드의 각 위치를 모두 탐색하면서 해당 위치에서 가장 긴시간이 걸리는 육지칸을 찾은 다음, 이 시간과 static 변수인 max중 큰 값을 비교하며 최신화하며 ..

algorithm 2021.08.05

백준 1092(JAVA)

문제 지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다. 각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오. 풀이 어려운 문제이다. 이 문제의 중요한점은 박스의 무게에 집착하면 안되고 크레인이 들수 있는 박스의 개수에 집중해야한다. 6 8 9 크레인 2 2 4 5 7 박스 (둘다 오름차순 정렬한 상태임) 첫번째 6 크레인은 박스 4개를 들수있다.(2 2 4 5) 두번째 8 크레인은 박스 5개를 들수있다.(2 2 4 5 7) 세번째 9 ..

algorithm 2021.08.03

thymeleaf에서 th:field와 th:selected 중복사용

타임리프에서 th:field와 th:selected를 중복으로 사용하면 둘중 하나가 적용이 되질않는다. 상황 th:field로 th:object에서 감싼 필드를 사용하고있었는데, th:selected가 계속 되질 않는 것이다.. 찾아보니 th:field와 th:selected는 동시에 적용이 되지 않는다는것을 알게되었다. 카테고리 기타 category name 해결 th:field는 name, id 속성과 필드가 매핑되어 값이 적절하게 들어간다. 그냥 직접 풀어서 사용하여 th:field를 사용하지않고 th:selected만 사용하여 해결 카테고리 기타 category name 뭐가문젠지 모르겠어서 해결하는데 꽤 걸렸다.. https://stackoverflow.com/questions/32206849/..

개발 2021.08.03

spring security를 살짝 적용해보자!

프로젝트를 진행하는데, 인증과 인가필요해서 찾아보다 spring security를 적용하면 접근하는 사용자가 누구인지에 대한 인증과 어떠한 자원에대한 접근이 가능한지에 대한 인가를 쉽게 적용할수 있다는 사실을 깨닫고 스프링 부트에서 spring security를 적용해려 했다. 그런데 너무 어려웠다. 설정도 복잡하고, spring security만의 기능을 이해하는데 힘들었다. 그래서 내가 스프링 시큐리티를 적용할 때 기억이 나지않을 경우 복기할 용도와, spring security를 처음 적용하는 사람에게 도움이 될까하고 포스팅을 하게되었다. 매우 간단하게 프로젝트를 진행할것이다! 초점은 스프링 시큐리티의 사용법이다. (본인도 스프링 시큐리티의 제대로된 매커니즘을 알지못한다.) 가자! 구현할 기능 어플..

개발 2021.07.30

[OS] 운영체제 프로세스 동기화 & 상호배제

다중프로그래밍 시스템은 프로세스가 여러개 존재하며, 프로세스들이 서로 독립적으로 동작한다. 그렇기에 공유 자원이나 데이터가 있을 경우 여러 프로세스가 접근하여 수행하면 예상치 못하는 문제가 발생할수 있다. 그렇기에 다중 프로그래밍 시스템 내에서 프로세스들 끼리 서로 동작을 맞추거나 대화를 하는 동기화과정이 필요하다. 이번에는 프로세스들간 동기화가 어떻게 이루어지는지, 그 과정에서 프로세스들간 상호배제가 어떻게 이루어지기에 공유 자원에 대해 자원을 할당받아 작업을 수행하는지 알아보자 동기화(Process Synchronization) 프로세스들이 서로 대화를 하며 동작을 맞추는 것을 의미한다. 서로간의 정보를 공유하는 것을 의미한다. 물론 다중 프로그래밍 시스템에서 프로세스들이 여러개 존재할 경우 필요한 ..

computer science 2021.07.28

백준 12852(JAVA)

문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 풀이 dp로 풀면 시간초과가 나지않을수 있다. 일단 현재 어떠한 수를 i(1 과 입력되는 N사이의 임의의 수) 라 하면 i의 연산의 최소횟수는 i - 1 수의 연산의 최소횟수, i / 3(나머지가 0이라면) 수의 연산의 최소횟수, i / 2(나머지가 0이라면) 수의 연산의 최소횟수의 의 가장 작은 값에 + 1을 한것이다. 그리고 연산되는 방법의 수는 List list = new ArrayList();로 Li..

algorithm 2021.07.26

sqlzoo - SUM and COUNT

SQL SELECT SUM(population) FROM world select distinct continent from world;distinct를 이용해서 중복을 없애던가 혹은 select continent from world group by continent;group by로 continent로 그룹화를 하던가! 하면 된다. select sum(gdp) from world where continent = 'Africa'; select count(name) from world where area >= 1000000;count집계함수로 쉽게 구할수있다. select sum(population) from world where name in ('Estonia', 'La..

sql 2021.07.23