오늘 겪은 문제 알고리즘 주차 마지막 날이라서 시험을 봤다. 그 중 지뢰찾기 맵을 만드는 문제를 푸는데 IndexOutOfBoundsException 이 발생했다. 시도한 방법 로직을 다시 생각해봤지만 로직에는 문제가 없다고 생각해 얼마 전 항해 동료에게 배웠던 디버깅을 진행해봤다. IndexOutOfBoundsException 이 발생할 만한 라인(배열에서 값을 꺼내오는 라인)에 브레이크 포인트를 걸고 언제 Exception 이 발생하는 지를 확인했다. 그렇게 확인한 결과 지뢰찾기 맵을 만들기 위해서는 i, j 번째 칸의 주위 8 칸을 확인하는 과정이 필요했는데 이 때 IndexOutOfBoundsException 이 발생하는 것이었다. 해결 방법 인덱스에 조건을 걸어서 배열에서 값을 꺼내오는 인덱스가..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FukN43%2Fbtr9RwIpvWj%2FQOA9B6Ee85ksfthZhEM8N0%2Fimg.png)
오늘은 동시성 문제에 대해서 학습하면서 알게 된 새로운 개념들에 대해 좀 정리를 해보려고 한다. 1. 원자성 2. 가시성 & CPU Cache 원자성 int i = 1; i = i + 2; 이렇게 코드를 실행하면 2번째 줄의 코드는 한 줄이지만 실제로는 총 3번의 연산이 이루어지는 것이다. 1. i 에 담긴 값을 읽어오고(Read) 2. 여기에 2를 더하고(Modify) 3. 다시 i 에 덮어써준다.(Write) 그래서 각각의 연산 사이에 시간텀이 발생하게 되고 만약 그 시간텀에 다른 스레드에서 i 라는 자원에 접근하면 예상치 못한 결과를 야기할 수 있는 것이다. 원자성이란 공유 자원에 대한 작업의 단위가 더 이상 쪼갤 수 없는 하나의 연산인 것처럼 동작하는것을 의미한다. 당장 i = i + 2 라는 작..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOOecI%2Fbtr9BIJwfQE%2FNIjkaug6QCmqgfmkfMjeKK%2Fimg.png)
오늘 겪은 문제 항해 측에서 제공해 준 강의로 자바 스레드를 학습했는데 강의에서 콘솔에 찍히는 결과와 내 인텔리제이 콘솔에 찍히는 결과가 달랐다. public class Main { public static void main(String[] args) { Runnable task = () -> { try { Thread.sleep(1000); System.out.println(Thread.currentThread().getName()); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("task : " + Thread.currentThread().getName()); }; Thread thread = new Thre..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBGyuf%2Fbtr9nmUqs0v%2F5lE5XFleZ562VpcL5L6GUk%2Fimg.png)
오늘의 문제 오늘 페어프로그래밍을 하면서 팀원과 풀이 방식이 갈린 문제가 있었다. https://school.programmers.co.kr/learn/courses/30/lessons/81301 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제인데 팀원의 코드는 매우 간결한데 반해 내가 푼 코드는 swtich case로 조건을 10개나 걸어서 코드가 엄청 길어졌다. public int solution(String s) { String[] nums = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; Str..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVWxru%2Fbtr8PYzIrPI%2FSPbPtBPVbjWt6as8kfA6EK%2Fimg.png)
이번 주 자바 기초를 학습하면서 가장 애먹었던 2가지는 '객체지향프로그래밍' 그리고 'JVM'이었다. 그래서 한 주를 마무리 하는 느낌으로 어려웠던 2가지 개념에 대해 정리를 해보고자 한다. 객체 지향 프로그래밍 사실 '지향', '프로그래밍' 이 두 단어는 익숙하기에 문제가 없었는데 그래서 대체 '객체'가 뭔데? 라는 생각이 들었다. 여러 자료를 찾아보고 내가 내린 결론은 객체란? 물리적으로든, 추상적으로든 존재하고 식별가능한 것 물리적, 추상적 하니까 뭔가 어렵게 느껴지지만 그냥 우리가 사는 세계에서 우리가 식별할 수 있는 모든 것이 객체라고 생각하면 된다. 우라가 사는 세계는 존재하는 모든 것들의 상호작용으로 이루어져있는데 이러한 점에 착안해서 프로그램을 구성하는 요소들을 객체로 정의하고 객체들 간의..