본문 바로가기
[Java Concurrency] 자바 메모리 모델 [Java Concurrency] 자바 메모리 모델 - 자바 메모리 모델(JMM, Java Memory Model) 의 내부 구조가 어떻게 동작하는지를 이해하고 있다면 상위 개념을 훨씬 효율적으로 쉽게 사용할 수 있을 것이다. 16.1. 자바 메모리 모델은 무엇이며, 왜 사용해야 하는가? - 특정 스레드에서 aVariable 이라는 변수에 값을 할당한다고 해보자. aVariable = 3; 자바 메모리 모델은 "스레드가 aVariable에 할당된 3이란 값을 사용할 수 있으려면 어떤 조건이 돼야 하는가?" 에 대한 답을 알고 있다. 동기화 기법을 사용하지 않는 상태라면 특정 스레드가 값이 할당되는 즉시, 심지어는 영원히 3이라는 값을 읽어가지 못하게 하는 여러 가지 상황이 발생할 수 있다. - JMM 은.. 2017. 5. 10.
[Java Concurrency] 객체구성 [Java Concurrency] 객체구성 4.1. 스레드 안전한 클래스 설계 - 객체가 갖고 있는 여러 가지 정보를 해당 객체 내부에 숨겨두면 전체 프로그램을 다 뒤져볼 필요 없이 객체 단위로 스레드 안전성이 확보되어 있는지 확인할 수 있다. - 클래스가 스레드 안전성을 확보하도록 설계하고자 할 때에는 다음과 같이 세 가지를 고려해야 한다. 객체의 상태를 보관하는 변수가 어떤 것인가? 객체의 상태를 보관하는 변수가 가질 수 있는 값이 어떤 종류, 어떤 범위에 해당하는가? 객체 내부의 값을 동시에 사용하고자 할 때, 그 과정을 관리할 수 있는 정책 - n 개의 변수를 갖는 객체의 상태는 n개 변수가 가질 수 있는 값의 전체 조합이다. A라는 객체 내부에 다른 객체 B를 가리키는 변수를 사용하고 있다면, .. 2017. 4. 18.
[Java Concurrency] 객체공유 [Java Concurrency] 객체공유 3.1. 가시성 - 일반적으로 특정 변수의 값을 가져갈 때 다른 스레드가 작성한 값을 가져갈 수 있다는 보장도 없고, 심지어는 값을 읽지 못 할 수도 있다. 메모리상의 공유된 변수를 여러 스레드에서 서로 사용할 수 있게 하려면 반드시 동기화 기능을 구현해야 한다. - 재배치(reordering) 현상을 조심해야 한다. 재배치 현상은 특정 메소드의 소스코드가 100% 코딩된 순서로 동작한다는 점을 보장할 수 없다는 점에 기인하는 문제이다. 단일 스레드로 동작할 때는 차이점을 전혀 알아챌 수 없지만 여러 스레드가 동시에 동작하는 경우에는 확연하게 나타날 수 있다. - 동기화 기능을 지정하지 않으면 컴파일러나 프로세서, JVM 등이 프로그램 코드가 실행되는 순서를 임.. 2017. 4. 17.
[Effective Java] 방어 가능한 readObject 메소드를 작성하자 [Effective Java] 방어 가능한 readObject 메소드를 작성하자 - Serializable 하게 만들고 싶은 class 의 물리적 표현과 논리적 표현이 같다고 해도, 무조건 implements Serializable 을 붙이는 것이 능사가 아니다. readObject 는 바이트 스트림 인자 하나만 받는 생성자라고 볼 수 있는데 누군가가 고의적으로 이상한 바이트 스트림을 제공할 경우 문제가 될 수 있다. 따라서 readObject 메소드를 만들고, defaultReadObject() 를 수행 후, 역직렬화되는 객체의 유효성을 검사해야 한다. 만일 유효성 검사에 실패하면, readObject 메소드에서 InvalidObjectException 예외를 발생시켜야 한다. - 위의 방법으로 유효성.. 2017. 3. 24.
[Effective Java] 하위 계층의 예외 처리를 신중하게 하자. [Effective Java] 하위 계층의 예외 처리를 신중하게 하자. - 상위 계층에서 하위 계층의 예외를 반드시 catch 해야 한다. 그리고 그 예외대신에 상위 계층의 추상체가 알 수 있는 예외로 바꿔 던져야 한다. 이 이디엄을 예외 변환(exception translation)이라 한다. 그렇지 않으면 구현 내용을 공개하는 것처럼 되어 나중에 호환성 이슈를 겪게 된다. - 만약 예외 변환을 사용하면서 근본적인 이유까지 확실히 알고 싶다면 변화할 때 excpetion 을 담아서 전달할 수 있다. 예를 들어 throw new HigherLevelException( lowerLevelException ) - 예외 연쇄 - 하위 계층(저수준)에서 발생한 예외를 분별 없이 전파하는 것보다는 예외 변환을 사.. 2017. 2. 27.
[라오스 방비엥] 최고의 맛집!! 개짱맛 돼지 바베큐 [라오스 방비엥] 최고의 맛집!! 개짱맛 돼지 바베큐 자, 먹는거 좋아하는 사람들은 기다리던 시간이 왔어~저녁식사를 하러 갈꺼야 따라와~ ㅋㅋ 자, 먹자 골목(?) 으로 가기 위해 이 골목을 지나. 마사지 가게들도 지나~ 어떤 불상이 있는 절도 지나~ 다가.. 특이한 부처님의 모습에,부처님 좌상 하나 찍어주고... 아!! 근데 라오스의 부처님 특징이 뭔지 알아?우리 한국의 부처님은 그냥 꼽슬머리 형태면서 머리가 살짝 둥글자나? 라오스 부처님은 꼭 머리에 저렇게 뾰쪽한 것을 달고 계신다는 거~~ ㅋ 시장도 지나~시장에서는 반찬같은 것을 파는데, 우리는 맛난거 먹을꺼니 그냥 구경하며 지나가구~ 자 이곳으로 왔어.울 엄니는 뭔가 앉지 않으면 안 되기 떄문에 벌써 자리에 앉으셨어 ㅋㅋ 이 곳에서 파는것은 바로 .. 2016. 11. 23.
[서울 데이트코스] 남산골 한옥마을에 소풍 다녀왔습니다. [서울 데이트코스] 남산골 한옥마을에 소풍 다녀왔습니다. #제목은 서울 데이트코스라고 카테고리화 하였지만,한옥마을에 소풍을 다녀온 사람은 우리 파트 사람들. 큐뮌쓰, 벨혁형, 수컷형, 아래 가 함께 하였습니다. #점심시간을 이용하여 미리 주문한 치킨과 피자를 싸들고 빠르게 이동. #중국 분들이 버스에서 엄청나게 내리시던데,즐거움을 충분히 찾을 수 있을지는 의문이다. #들어가는 길에 이렇게 사실성 높은 그림으로 약도가 제공된다, #입구에는 "남산골 한옥마을" 이라고 써져 있었지만,정식 명칭은 "남산골 전통정원" 인가보다. #글을 요약하면,남산의 옛 이름은 "목멱산".옛 선인들은 남산 곳곳에 정자를 지어 풍류를 즐겼다.이곳은 훼손되었던 지형을 복원하고, 전통 수종을 심고, 전통양식의 정원을 복원했다.이곳에 .. 2016. 8. 7.
[실용주의 프로그래머] 지식 포트폴리오 [실용주의 프로그래머] 지식 포트폴리오 출처 : 실용주의 프로그래머 -지식에 대한 투자가 언제나 최고의 이윤을 낸다. - 벤자민 프랭클린 -포트폴리오 만들기 * 주기적인 투자 자신의 지식 포트폴리오에 주기적으로 투자해야 한다. 비록 소량일지라도 그 습관 자체가 금액의 합계만큼이나 중요하다. * 다각화 여러 가지를 알면 알수록 자신의 가치는 더욱 높아진다. 기본적으로 현재 작업에 사용하는 특정 기술의 등장과 퇴장을 알아야 한다. * 리스크 관리 여러분의 기술 달걀을 한 바구니에 모두 담지 마라. * 싸게 사서 비싸게 팔기 새롭게 떠오르는 기술이 인기를 끌기 전에 미리 알고 학습하는 것은 저평가된 주식을 찾아내는 것만큼이나 어려울 수 있지만, 이익 또한 그만큼 클 수 있다. * 검토 및 재조정 이 산업은 매.. 2016. 7. 28.
[iOS Study] 뷰 다시 그리기와 UIScrollView [iOS Study] 뷰 다시 그리기와 UIScrollView 출처 : 아론 힐리가스의 iOS 프로그래밍 -사용자가 뷰를 터치하면 뷰는 touchesBegan:withEvent: 메시지를 받는다. -iOS 앱이 실행되면 런 루프가 시작된다.런 루프의 역할은 터치 등의 이벤트를 대기하는 것이다.런 루프는 이벤트가 발생하면 그 이벤트에 관한 적당한 핸들러 메소드를 찾는다.그 핸들러 메소드는 해당 기능을 수행하는 다른 메소드들을 부른다.메소드가 모두 완료되면 제어는 다시 런 루프로 돌아간다. 런 루프가 다시 제어권을 얻으면 갱신해야 할 뷰(dirty view) 목록을 확인한다.이 뷰들은 가장 최근 이벤트 처리 과정에서 발생한 내용들을 기반으로 다시 그려져야 한다.그래서 런 루프는 뷰 계층의 모든 것들이 다시 .. 2016. 2. 17.
반응형