본문 바로가기

Programming/JAVA

(31)
java : 특정 객체를 부모로 상속하는 객체들을 파라미터로 하는 메소드를 쓸 땐 부모 객체를 파라미터로. 제목이 무척 기네요. ㅎㅎ 제목을 보면 알 수 있듯이 상속에 대해 작성할까 합니다. 사실 상속보다는 다형성이란 표현이 어울리지 않을까 하기도 하네요. 우선 소스부터 보겠습니다. package test2; class Parent{int age; } class Son1 extends Parent{ public Son1(){super.age = 28; } } class Son2 extends Parent{ public Son2(){super.age = 25; } } class Son3 extends Parent{ public Son3(){super.age = 22; } } public class PolymorphismTest1 { public static void main(String[] args) { Pol..
[링크] jvm 의 메모리 구조. 아래의 링크에서 한동안 outofmemory 오류로 끙끙앓았던 시간들이 부끄러웠음을 알게 되네요. JVM의 메모리에 대한 구조와 설명이 무척 잘되어 있습니다. 첫번째 링크는 heap 메모리영역과 그것의 GC 에 대해 설명이 잘 되어 있으며 두번째 링크는 메모리영역들에 대한 설명과 함께 JVM 메모리 옵션 등에 대해 설명이 잘 되어 있습니다. 온전히 이해하기가 쉽지 않아서 링크를 걸어두었습니다. :) http://performeister.tistory.com/14 http://blog.kangwoo.kr/51
java : interface와 abstract를 이용해서 자손클래스들에게 바른 길을 안내해주세요. 우선 이 글을 이해하기 위해서는 추상화와 구체화가 무엇인지 알아야합니다. 추상화와 구체화는 OOP 카테고리에 설명해놓았습니다. 먼저 참고해주시면 감사하겠습니다. :) java가 재사용성을 지원해주고 객체지향적 코딩을 지원해주기에 선택한 탁월한 방법. 바로 abstract와 interface 키워드입니다. 우선 interface에 대해서 알려드리자면 추상화의 정도가 높은 클래스를 알리는 키워드로서 interface 클래스는 상수멤버만 가지고 멤버변수를 가지고 있지 않을 뿐더러 가지고 있는 모든 메서드는 구현되어있지 않습니다. 실제 소스로의 구현은 밑과 같습니다. interface TestInterface{ public static final int MAX = 10; int MIN = 0; // public..
java : 상속관계의 참조변수 대입 쉽게 이해하기.(형변환, 다형성 등) 프로그래밍을 하다보면 서로 다른 타입의 변수들간의 대입관계를 정의하는 일이 종종 있습니다. 예를 들어 int b = 4; long l = b; b = (int) l; 위와 같은 경우입니다. 이러한 대입관계를 형변환 대입이라고 합니다. 주의점은 크기가 작은 타입의 기본형변수는 크기가 큰 타입의 변수로 문제없이 대입을하고 또한 값 손실 같은 문제를 고려하지 않아도 되지만 크기가 작은 타입의 변수를 크기가 큰 타입의 변수로 대입을 하려고 할때에는 캐스팅이란 것을 해주어야합니다. 캐스팅이란 위 예의 세번째 라인에서 볼 수 있는 것 처럼 어떤 타입으로 형변환을 할 것인지를 대입하려는 변수 앞에 알려주어야 하는 것입니다. 이때에는 값 손실을 감수하여야 합니다. float l2 = 1.4f; int b = (int)..
java : 배열은 참조변수! 자바의 정석에 보면 밑의 예제가 있습니다. class ArrayEx6{ public static void main(String[] args){ int[] number = new int[10]; int[] counter = new int[10]; for(int i=0; i < number.length; i++) System.out.println(number[i] = (int)(Math.random() * 10)); System.out.println(); for(int i=0; i
java : 대체 객체가 뭐죠? instance 가 뭡니까? 클래스를 통해 만들어지는 객체. 전 흔하게 객체가 뭐냐는 질문을 받으면 클래스를 통해 만들어지는 사용가능한 메모리에 올라간 클래스? 이렇게 답하곤 했습니다. 오늘 자바의 정석을 보던 중 아주 명확하게 이해할 수 있는 구절을 보았습니다. "객체는 클래스에 정의된 인스턴수 변수의 집합이다. 객체에는 클래스변수나 메서드가 포함되지 않는다. 객체는 오직 인스턴수 변수들로만 구성되어 있다." 그렇습니다!!! 객체는 오직 인스턴수 변수들로만 구성되어있는 집합과도 같은 것이며 결코 static 변수나 혹은 어떤 메소드든 포함되지 않습니다. 그럼 생각해볼까요? class A{ int a; int b; class A(){} public void method(){} } class Test{ public static voi..
java : public final static Color WHITE = new Color(255, 255, 255); 문제점 아직 디자인패턴에 대해 자세히 공부를 안하고 있어서 Singletone pattern은 논외로 하고 작성하겠습니다. 위의 소스는 누구나가 언제든지 접근할 수 있는 Color type의 참조변수 WHITE를 생성하는것입니다. 더이상 이 WHITE 변수는 다른 Color type의 인스턴스를 참조할 수 없기때문에 언제든지 WHITE를 작성하면 매개변수가 255, 255, 255 인 인스턴스를 사용할 수 있는 것으로 보입니다. 여기엔 하나의 치명적일 수 있는 약점이 있습니다. 바로 인스턴스 필드값 자체가 바뀌는 가능성이 있다면 WHITE는 더이상 개발자, 사용자가 원하는 WHITE가 아닐 수 있다는 것입니다. 필드값 자체가 바뀔 가능성은 어떤 때에 있을까요?? (밑의 클래스는 예제를 위한 예제로 봐주시고 이해..
java : method의 참조형 매개변수에 대해 쉽게할 수 있는 오해. 오늘 프로그래밍하면서 갑자기 리턴이 없는 메소드를 호출하는 클래스를 보았습니다. 그리고 메소드안의 로직만 봤을 땐 '이건 전혀 쓸모 없는 메소드인데 왜 있는거지?' 라고 생각. 간혹 자바는 순수히 포인터로만 이루어진 언어임을 간과하는 경우가 종종 있습니다. 기본형 타입의 변수를 제외한 모든 타입의 변수들은(사용자정의 포함) 참조형 변수입니다. 따라서 대입연산이 이루어지게 되면 그건 value를 직접 대입하는 것이 아니라 value를 가지고 있는 메모리에 접근할 수 있는 주소를 넘겨주는 것입니다. 다들 학부때를 떠올리면서 '응응' 하실 것 같습니다 ㅎㅎ 물론 저같은 초보에 사고를 하지 않고 프로그래밍하는(가능한가?!!!!) 사람에게나 해당되겠지만 method(int a, int b, int[] array)..