본문 바로가기

Programming

(123)
java : 상속을 통해 리턴타입을 보다 유연하면서도 강제할 수 있어요! (다형성) 제목이 좀 이상하네요. 한국 토박 스물여덟해를 지냈음에도 한국말이 서툰것 같습니다 -_-; 상속을 이용하면 좋은 점은 여러가지가 있습니다. 그 중 한가지를 소개해드리겠습니다. (저와 같은 초보를 대상으로 하니~ 고수분들께서는 피식 웃어주시며 격려해주세요 ㅎㅎ) 메소드의 4대 요소 중 하나인 리턴값 타입은 무척 중요합니다. 이 리턴이 무엇이 되느냐만으로도 어느 정도 그 메소드를 직접 열어보지 않고도 메소드네이밍과 리턴타입으로 메소드의 기능을 추측할 수 있지요. (물론 내공이 쌓여야겠지요... 전 아직 헤롱헤롱~) 이 리턴 타입에 대해서 다형성을 이용한다는 것은 보다 클라이언트 코드에게 명확한 코드를 작성할 수 있게 신뢰를(?) 심어줄 수 있습니다. 그럼 소스를 볼까요~ 이하는 abstract 클래스로 ke..
java : JRE와 JDK의 구분을 정확히 해주는 그림 아래 그림에 보면 JRE에는 여러 플랫폼을 지원하기 위한 컴파일러(JVM)이 자리하고 있음을 알 수 있습니다. 결국 JRE가 있어야만 java 프로그램들이 실행되어진다는 것을 알 수 있죠. 위로는 라이브러리들과 플러그인 툴킷같은게 있는데, 모두 작성하기엔 지금 시간이 좀 그래서 후에 수정하겠습니다~ 그리고 JDK가 JRE를 포함하고 있는 모습인데요, 여기에서 보면 javac가 눈에 띄네요. 결국 java파일을 컴파일하는데에 필요한 것은 JRE에는 없고 JDK에 있네요. 처음 자바를 배울 때 JDK를 설치하라는 것은. 이 이유입니다. ㅎㅎ;; 집에 컴퓨터에 java가 설치되어있어도 javac 명령어를 아무리 타이핑해도 이상한 문구 그만 날리라는 메시지밖에 못받았던 이유는 요기에 있네요~ (물론;;; 환경설..
jsp : <%! %> tag instance 레벨의 java code를 뜻합니다. 메소드선언시에 사용하라고 여러 책들이 뜻하고 있으나 실제 jsp의 태그 내에 작성된 소스들은 변환된 java파일의 상단에 기술됩니다. 메소드 선언 뿐만이 아니라 인스턴스레벨에서 다루어져야하는 변수들 역시도 이곳에 기술하면 되겠습니다. (로컬변수와 인스턴스변수의 차이점에 대해 먼저 이해를 해야하겠어요~) ※ jsp 파일은 java파일로 변환시에 Servlet 파일처럼 변환됩니다. 따라서 jsp파일은 Service 메소드내에 차곡차곡 들어가게되죠. 위에서 말하는 태그는 그것과는 달리 인스턴스 레벨로 Service 메소드에 들어가지 않습니다.
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은 강아..