본문 바로가기

분류 전체보기

(200)
구글 입사문제. 사건의 최대 피해자 입장에서부터 사고하기. 오늘 점심때 사장님과 나눴던 얘기입니다. 재밌네요 ㅋㅋ 아주 합리적인(?) 해적 5명이 있습니다. A, B, C, D, E 해적은 알파벳 역순으로 서열이 결정되어있습니다. A가 제일 대장이란 얘기죠. 그리고 이들에게 이익이 생긴다면 이들은 다수결에 의해서 각자의 이익을 분배받습니다. 의견을 낼 수 있는 권한은 대장뿐이며, 이때 대장의 의견이 다수결에 의해 무시된다면 대장은 죽습니다. 그럼 그 다음으로 서열이 높은 사람이 의견을 낼 수 있는 권한이 생기면서 이익분배를 할 수 있습니다. 즉 A가 다수결에 의해 의견이 무시되었다면 A는 사망하고, B가 대장이 되면서 이익분배 의견을 낼 수 있는 것이죠. 다수결은 50:50일 경우 의견을 낸 대장의 의견은 통과가 됩니다. 시작이 5명인 A는 50:50의 의견을 ..
java : coding tip - 삼항연산자를 활용한 분기 보통 분기를 해야할 경우엔 if else를 많이 사용합니다. 하지만 특정 key들이 있고 그 key에 맵핑되는 data를 각 분기들 모두 공통으로 사용하는 변수에 넣는다면 if else 보다 짧게 코딩할 수 있는 방법이 있습니다. 제목처럼 삼항연산자를 사용하는 것이죠. 예를 들어보겠습니다. 철수는 소개팅 3건을 연달아 주선하기로 하였습니다. 어떤 카페에서 각 커플들을 소개해주기 위해 장소는 한 곳만 정해놓았습니다. 각 커플들은 서로의 짝이 정해진 상태이지만 여성분들의 스케쥴이 정해지지 않아 먼저 연락오는 여성분을 순서로하여 각 커플에 문자메시지를 보내기로 하였습니다. 이걸 if else문을 사용하여 프로그래밍한다면 caller = getCall(); if( "jollie".equals(caller) ){..
Database - index를 걸어놓은 column을 다룰때 주의점 몇가지입니다. index가 걸려있는 column을 select를 할 경우에는 그 column의 index structure에 들어가서 데이터를 가져오게 됩니다. 그래서 이미 정렬이 되어있는 data들이 select되기 때문에 cost는 매우 적습니다. (보통 binary tree구조로 되어있으며 DBMS가 data의 CUD에 따라서 새로이 정렬을 합니다. 사실 binary plus tree 구조라고 하는데, 그 의미를 제가 정확히 이해 못하고 있으며, 또한 큰 차이가 없다하여 그냥 binary tree라고 이해하고 있는 중입니다. 물론 시간이 허락한다면 수정할 것입니다.) index를 타기 위해서는 where 조건으로 반드시 index를 탈 수 있도록 사용자가 index가 걸려 있는 column을 명시해주어야합니다. ..
programming : 사용하지 않는 변수를 계속 살려두지 마세요.. 동정심 따윈... ※ 객체와 객체가 가지고 있는 인스턴스 변수 및 메소드 내의 로컬 변수들에 대해 오해를 좀 했네요. 블록과 메소드를 이용하여 변수들의 삶을 명시해주는 것은 메모리 입장에서는 상관이 없습니다. 그저 linking이 있느냐 없느냐의 차이이지, 객체는 어쨌든 변수들을 모두 가지고 메모리에 상주하며 gc는 객체를 참조하고 있는 변수가 있는지 여부만 확인하고 객체를 가지고 갑니다. 따라서, 객체안에서 선언되었던 모든 변수들은 객체의 라이프사이클과 함께한다고 보면 되겠습니다. 과거에 작성된 여러 jsp source code들을 접하면서 느끼는 점은 대체 왜이렇게 엉망인가하는 당혹감입니다. (아무래도 java파일보다는 jsp파일 작성시 이런 경우가 많더군요) 물론 그 당시에 어떠한 패턴이 정의되어 있지 않았었기에 생..
java : 동치에 대해서.(두 객체가 같다는 의미) 간혹 동치에 대해서 잘못된 연산에 의해 원치않는 결과값을 받게 되는 경우가 이슈화되어 정리해봅니다. 여기서는 value를 기준으로 하여 같다는 것을(true) 리턴하기 위함을 유도합니다. reference 동치 heap memory에 있는 한 객체를 서로 다른 레퍼런스(변수)로 참조하는 경우를 말합니다. 결과적으로 말하자면, 두 레퍼런스는 동치입니다. 두 레퍼런스에 대해서 hashCode() 메소드를 호출한다면(Object 메소드를 override하여 달리 정의하지 않았을때) 두 레퍼런스의 hashCode() 메소드는 같은 값을 리턴합니다. hashCode코드는 heap 메모리에 있는 객체의 메모리 주소를 바탕으로 만들어지기 때문이죠. 두 레퍼런스가 정말 같은 객체를 참조하고 있는지 확인해보고 싶다면 =..
객체지향 원리 (headfirst OOA&D 에서 발췌) 매우 추상적인 얘기이며 어쩌면 당연하다고 생각했던 것들인데 실제 코딩에서는 무시하고 작성하는 버릇이 있는 듯 하여 기록해둡니다. 이 글을 보시는 분들중 다년간의 코딩의 경험이 있는 분이시면서도 이 개념에 대해서는 모르셨던 분이라면 '아하, 그것을 이렇게 표현하는구나' 라고 생각하실 수 있는 부분입니다. 저같은 초보는 이제 익숙해져야겠죠 ㅎㅎ;; ※ 밑의 나열된 원리들은 앞으로 코딩이나 디자인 패턴 학습을 통해서 예제나 경우로 채워나갈 것입니다. 1. 변하는 것을 캡슐화해주세요. 제가 이해하고 있는 위의 말은 행동에 의해 변화되는 데이터를 가지고 있는 객체에 대해서 캡슐화를 하라는 말입니다. 저 위에 말했듯이 추상적인 얘기네요 ㅎㅎ 제목에 적어놓은 서적에서 제공하는 예를 들어봅시다. darkship은 강아..
무서운 네이버... 어제 오늘 갑자기 방문자수가 급격히 늘어서 유입경로를 보니 naver 검색엔진을 통해 유입되는 사람들이군요;; 전 보통 검색엔진은 구글, 카페나 메일은 다음을 쓰는데 네이버 이용자가 이렇게 많았다니;;; 근래들어 파워블로거님들과 트위터에서 네이버의 검색결과 등을 비판하던데 그때문에 네이버의 정책이 바뀌었나봅니다. 찾아와주시는 방문객분들께는 감사하지만 불펌 등은 자제해주시기 바랍니다. (네이버 검색엔진을 안쓰는 이유 중 하나는 무분별한 불펌으로 가득찬 네이버블로그와 카페때문이기도 해서요 ㅎㅎ)
programming : 함수 (method) 의 4대요소. 1. name : 함수의 이름입니다. 2. input (parameter) : 무엇을 파라미터로 받을 것인지에 대한 이해입니다. 3. output (return value) : 무엇을 반환할 것인지에 대한 이해입니다. 4. what to do? : 이 메소드가 무얼하는지에 대한 정의입니다. 매우 당연한 것인데, 간혹 프로그래밍하다보면 참 이상한 메소드이름에 잘못된 파라미터로 이상한 짓을 하더니 결과는 암담한 걸 반환하는 경우가 생길 수 있겠죠. 무척 추상적인 얘기인데 어떠한 함수를 작성할 때 단순히 한번 쓰고 버릴 냥으로 작성하다보면 결국 잘못된 코딩을 남발할 수 있겠죠. 간혹 이런 실수를 저지르는 것 같아서 끄적여보았습니다 ;;