본문 바로가기

Wanna be a Programmer/Java Programming

Java Programming - Generic(제네릭), Object, Wrapper Class


Generic(제너릭) 

- Class에서 사용할 typeclass 작성 시 지정하는 것이 아니라 사용시점에 지정하는 것

- 구문 : Class 선언 public class ClassName <E> { public void go(E e) { } }

ex) ClassName c1 = new ClassName <String > ();

           ClassName c2 = new ClassName <Human > ();

Generic 파라미터는 static 메소드에서는 사용할 수 없다.


Object

- Java.lang.Object : 모든 class의 최상위 모든 객체의 type이 될 수 있다.

- 메소드

* public String toString() : 객체(object)string으로 반환

* public boolean equals(Object obj) : 매개변수로 받은 객체가 같은 객체인지 비교

        ex) obj1.equals(obj2) obj1 == obj2


Overriding : 두 객체의 attribute의 값이 같다면 true 리턴

equals() 메소드를 overriding할 때 반드시 hashCode() 메소드도 같이 overriding 한다.

Because, Set에서 대입하려는 객체와 이미 들어있는 객체를 비교할 때 equals() 메소드와 hashCode() 메소드가 모두 참 일 때만 같은 객체라고 판단하기 때문에 equals()hashCode() 메소드 모두 overriding이 필요하다.

 

원래는 obj1obj2 객체가 같은지를 비교하여 값을 true 혹은 false의 값을 반환 하는 것이지만 대부분이 ((ex)obj1=“abc”, obj2=“abc”)와 같이 객체들이 가지고 있는 문자열을 비교하는 것으로 인식하여 이것을 Overriding을 통해서 각기 객체가 다르더라도 가지고 있는 문자열의 값이 같은지 비교를 하여 true 혹은 false를 리턴한다.


Java.lang.Class

- Class의 정보를 처리하는 객체

- Object : getClass() Class 객체의 정보를 리턴

Class c = obj.getClass();

- Class이름.class Class 객체

Class c = ProductDTO.class;

- Class.forName(“ClassfullyName”) 주로 JDBC에서 쓰임

Class c = Class.forName(“dto.ProductDTO”); import를 하더라도 문자열이기 때문에 풀네임을 써야함

 

Wrapper class 

- 자바의 primitive type을 객체화 시킨 것(byte, short, int, long, float, double, char, boolean)

- boxing : primitive wrapper 객체

생성자의 argument로 넣어 객체 생성 ex) new Integer(10); new Integer(“10”);


Auto boxing

Jdk 1.4 버전 int I = 10; Integer in = new Integer(i);

Jdk 1.5 버전 Integer in = i; Long l = 10l;(auto boxing)

 

Unboxing : Wrapper 객체 primitive

wrapper객체.XXXValue(); XXXprimitive type ex) int i = in.intValue(); long l = en.longValue();


Auto unboxing

Integer in = new Integer(10); int i = in.intValue(); int i = in;