본문 바로가기

Programming/JAVA

(31)
java : Generic - 와일드카드 public void takeAnimals(ArrayList animals) { for(Animal animal : animals){ animal.eat(); } } 메소드에서 인자값으로 Generic (유형매개변수) 을 사용시에는 다형성이 허용되지 않습니다. 즉, 위에서 보는 것과 같은 메소드는 인자로 반드시 ArrayList 타입만 허용됩니다. 만약 Animal 을 상속받는 Human, Lion, Tiger 같은 클래스들만 모아두고 generic 을 각개로 선언했다면 저 메소드를 호출하면서 사용할 수 있는 파라미터가 되지 못합니다. (ArrayList, ArrayList, ArrayList 등을 파라미터로 쓰질 못한다는 것입니다. 세 클래스 모두 Animal을 extends 하고 있다 하더라도 말이죠..
java : 강력한 형 안정성 기술. generic 우선 generic 이란 개념을 사용할 때 저같은 초보자들을 대상으로 설명하자면. 자료구조의 컬렉션을 사용할 때 쓰이는 type 강제성 기술입니다. ArrayList al = new ArrayList(); 위와 같이 말이죠. 위처럼 선언한 ArrayList 자료구조는 String type의 객체만 배열의 멤버들로 사용할 수 있습니다. (멤버라는 표현이 옳은지는 모르겠네요. 요소, element가 더 정확한 표현이겠지만 편의상 멤버라고 할게요 ㅎㅎ;) 변수 al은 generic을 통해 String으로만 이루어진 자료구조라고 선언되어졌습니다. 이렇게 된다면 public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable,..
java : 프로그래머들의 너저분한 코딩을 막아주기 위한 센스. package JDK 1.4부터 권고사항에서 강제사항으로 바뀐 것들 중 하나가 default package의 class 들을 더이상 다른 package에서 import할 수 없는 것입니다. 웹서핑하다 보게된 건데요, 이유는 클래스들의 같은 이름의 충돌을 방지하기 위한거라네요. 패키지와 클래스, 메소드들. 이름만으로 각 기능들과 역할에 대해 이해하기 쉽도록 코딩하라고 마련된 배려일까요 ㅎㅎ
java : 상속을 통해 리턴타입을 보다 유연하면서도 강제할 수 있어요! (다형성) 제목이 좀 이상하네요. 한국 토박 스물여덟해를 지냈음에도 한국말이 서툰것 같습니다 -_-; 상속을 이용하면 좋은 점은 여러가지가 있습니다. 그 중 한가지를 소개해드리겠습니다. (저와 같은 초보를 대상으로 하니~ 고수분들께서는 피식 웃어주시며 격려해주세요 ㅎㅎ) 메소드의 4대 요소 중 하나인 리턴값 타입은 무척 중요합니다. 이 리턴이 무엇이 되느냐만으로도 어느 정도 그 메소드를 직접 열어보지 않고도 메소드네이밍과 리턴타입으로 메소드의 기능을 추측할 수 있지요. (물론 내공이 쌓여야겠지요... 전 아직 헤롱헤롱~) 이 리턴 타입에 대해서 다형성을 이용한다는 것은 보다 클라이언트 코드에게 명확한 코드를 작성할 수 있게 신뢰를(?) 심어줄 수 있습니다. 그럼 소스를 볼까요~ 이하는 abstract 클래스로 ke..
java : JRE와 JDK의 구분을 정확히 해주는 그림 아래 그림에 보면 JRE에는 여러 플랫폼을 지원하기 위한 컴파일러(JVM)이 자리하고 있음을 알 수 있습니다. 결국 JRE가 있어야만 java 프로그램들이 실행되어진다는 것을 알 수 있죠. 위로는 라이브러리들과 플러그인 툴킷같은게 있는데, 모두 작성하기엔 지금 시간이 좀 그래서 후에 수정하겠습니다~ 그리고 JDK가 JRE를 포함하고 있는 모습인데요, 여기에서 보면 javac가 눈에 띄네요. 결국 java파일을 컴파일하는데에 필요한 것은 JRE에는 없고 JDK에 있네요. 처음 자바를 배울 때 JDK를 설치하라는 것은. 이 이유입니다. ㅎㅎ;; 집에 컴퓨터에 java가 설치되어있어도 javac 명령어를 아무리 타이핑해도 이상한 문구 그만 날리라는 메시지밖에 못받았던 이유는 요기에 있네요~ (물론;;; 환경설..
java : coding tip - 삼항연산자를 활용한 분기 보통 분기를 해야할 경우엔 if else를 많이 사용합니다. 하지만 특정 key들이 있고 그 key에 맵핑되는 data를 각 분기들 모두 공통으로 사용하는 변수에 넣는다면 if else 보다 짧게 코딩할 수 있는 방법이 있습니다. 제목처럼 삼항연산자를 사용하는 것이죠. 예를 들어보겠습니다. 철수는 소개팅 3건을 연달아 주선하기로 하였습니다. 어떤 카페에서 각 커플들을 소개해주기 위해 장소는 한 곳만 정해놓았습니다. 각 커플들은 서로의 짝이 정해진 상태이지만 여성분들의 스케쥴이 정해지지 않아 먼저 연락오는 여성분을 순서로하여 각 커플에 문자메시지를 보내기로 하였습니다. 이걸 if else문을 사용하여 프로그래밍한다면 caller = getCall(); if( "jollie".equals(caller) ){..
java : 동치에 대해서.(두 객체가 같다는 의미) 간혹 동치에 대해서 잘못된 연산에 의해 원치않는 결과값을 받게 되는 경우가 이슈화되어 정리해봅니다. 여기서는 value를 기준으로 하여 같다는 것을(true) 리턴하기 위함을 유도합니다. reference 동치 heap memory에 있는 한 객체를 서로 다른 레퍼런스(변수)로 참조하는 경우를 말합니다. 결과적으로 말하자면, 두 레퍼런스는 동치입니다. 두 레퍼런스에 대해서 hashCode() 메소드를 호출한다면(Object 메소드를 override하여 달리 정의하지 않았을때) 두 레퍼런스의 hashCode() 메소드는 같은 값을 리턴합니다. hashCode코드는 heap 메모리에 있는 객체의 메모리 주소를 바탕으로 만들어지기 때문이죠. 두 레퍼런스가 정말 같은 객체를 참조하고 있는지 확인해보고 싶다면 =..
java : 서버에서 구동중인 jsp파일을 수정하면 자동으로 서버에 반영이되요! 한번즈음은 생각해볼 필요가 있겠죠? ※ 우선 이 글은 이클립스와 같은 자동으로 컴파일을 해주는 IDE를 사용하는 입장에서 작성하였습니다. 이미 구동중인 class파일들이 서버에 올라가서 구동중에 있는데 개발자들은 언제든 jsp 파일 등을 수정하고 저장하면 서버에서는 수정한 사항이 보여집니다. 이미 서버에는 class파일이 올라가 있을텐데 어떻게 이런 아름다운 일이 벌어질까요? 이는 class loader와 dynamic binding에 밀접한 관련이 있습니다. 상식적으로 메모리에 상주하고 있는 객체와 같은 이름의 객체가 메모리에 올라올 경우는 반드시 문제가 발생합니다. 같은 이름의 변수들을 선언할 수 없는 것과 같은 이치죠.(block 처리 등을 예외하고^^;;) 따라서 구동중인 애플리케이션은 적재되어 ..