티스토리 뷰

1.Wrapper class란?

레퍼 클래스란 기본 데이터 타입 8 종류를 감싸고 있는 클래스를 의미한다.

보통 println( )에 객체를 println(3); 이런식으로 직접 입력하면 두 가지 중 하나로 출력이 된다.

(1)오버라이딩이 되어 있지 않으면 주소값이 나오고, (2)오버라이딩이 되었을 시 toString을 호출하여 3이라는 값이 출력되는 것이다. 즉 println()함수에 값을 바로 집어 넣어서 해당 값을 온전히 받고 싶다면 상속을 해야 얻을 수 잇다.

 

그런데 프로그래밍을 하다보면 기본 데이터 타입(primitive type)을 객체로 표현해야 하는 경우가 있는데 

이럴 때 사용하는 것이 Wrapping class다. 그런데 Wrapping이 된다면 포장이 된 것이라 기본 타입 값을 외부에서 변경할 수 없다. 

 

Integer는 int를 감싸고 있는 래퍼클래스이고, Double은 double을 감싸고 있는 래퍼클래스이다.

다른 말로 하자면 int를 객체(클래스)로 표현한 것이 래퍼 클래스이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Wrapper {
    public static void showData(Object obj) {
        System.out.println(obj);
    }
 
    public static void main(String[] args) {
 
        Integer iInst = new Integer(3); // toString이 함수오버라이딩 되어서 Integer에서 3을 뿌림
        showData(iInst);
        showData(new Double(7.15));
 
    }
 
}
cs

 

Wrapping에는 두 가지 기능이 있는데 Boxing(박싱)과 Unboxing(언박싱)이다.

1) Boxing: Primitive type을 객체로 바꾸는것

기본 자료형의 값     (Boxing) →      Wrapper 인스턴스

Integer n1 = 10;

2) Unboxing: 객체에 있는것을 primitive type으로 꺼내오는 것
기본 자료형의 값  ←(Unboxing)    Wrapper 인스턴스

int num = n1;
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.security.Identity;
 
class AutoBoxingUnboxing {
    public static void main(String[] args) {
 
        Integer iObj = new Integer(10); // 박싱
        Double dObj = new Double(3.14); // 박싱
 
        System.out.println(iObj);
        System.out.println(dObj);
        System.out.println();
 
        int num1 = iObj.intValue(); // 언박싱
        double num2 = dObj.doubleValue(); // 언박싱
 
        iObj = new Integer(iObj.intValue() + 10);
        dObj = new Double(dObj.doubleValue() + 1.2);
 
        System.out.println(num1);
        System.out.println(num2);
 
    }
 
}
 
cs

 

 

 

 

 

max, min sum valueOf 이런식으로 많이 감쌈

 

 

객체 형에 숫자를 더해버려 . 이거는 8개의 레퍼 클래스만 가능하다.

 

 

 

 


2. auto unboxing 이란?

direct 로 집어넣는 것을 auto boxing이라고 한다.

문법적으로 autoboxing과 unboxing이 있다.

 

예시1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class AutoBoxingUnboxing {
    public static void main(String[] args) {
 
        String str = "ABCD" + "가나다라마바사";
        String str2 = new String("String"); // 배열이 옴
        System.out.println(str);
        System.out.println(str2);
 
        // ===============================
 
        Integer num = 10;
        num++// new Integer(new.intValue()+1);
        System.out.println(num); // 오토 박싱과 오토 언박싱 동시 진행
 
        num += 3// new Integer(new.intValue()+1-3)
        System.out.println(num); // 오토 박싱과 오토 언박싱 동시 진행
 
        int r = num + 5;
        Integer rObj = num - 5;
 
        System.out.println(r);
        System.out.println(rObj);
 
    }
 
}
cs

 

예시2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.security.Identity;
 
public class AutoBoxing {
    public static void main(String[] args) {
 
        Integer iObj = new Integer(10); // 박싱
        Double dObj = new Double(3.14); // 박싱
 
        System.out.println(iObj);
        System.out.println(dObj);
        System.out.println();
 
        int num1 = iObj.intValue(); // 언박싱
        double num2 = dObj.doubleValue(); // 언박싱
 
        iObj = new Integer(iObj.intValue() + 10);
        dObj = new Double(dObj.doubleValue() + 1.2);
 
        System.out.println(num1);
        System.out.println(num2);
 
    }
 
}
 
cs

 

 

 

 


3.BigInteger 클래스에 대하여 설명하시오. 

21억 이상의 엄청 큰 수 계산할때 Integer앞에 Big을 붙인다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.math.BigInteger;
 
public class BigIntegerEx {
    public static void main(String[] args) {
 
        // 객체를 통해서 컨트롤. 숫자가 너무 커서 multiply(),add() 이런식의 함수를 써야함. +-이런거로 안됨.
        // long형으로 표현 가능한 값의 크기 출력
        System.out.println("최대 정수: " + Long.MAX_VALUE);
        System.out.println("최소 정수: " + Long.MIN_VALUE);
        System.out.println();
 
        // 매우 큰 수를 BigInteger 인스턴스로 표현
        BigInteger big1 = new BigInteger("100000000000000000000");
        BigInteger big2 = new BigInteger("-99999999999999999999");
 
        // BigInteger 기반 덧셈 연산
        BigInteger r1 = big1.add(big2);
        System.out.println("덧셈 결과: " + r1);
 
        // BigInteger 기반 곱셈 연산
        BigInteger r2 = big1.multiply(big2);
        System.out.println("곱셈 결과: " + r2);
        System.out.println();
 
        // 인스턴스에 저장된 값을 int형 정수로 반환
        int num = r1.intValueExact();
        System.out.println("From BigInteger: " + num);
 
    }
 
}
 
cs

 

 

 

 


4.  Object, equals() 실습

- 클래스 Person은 이름을 저장하는 필드 구성
- 클래스 Person은 상위 클래스 Object의 메소드 equals()를 오버라이딩하여 이름이 같으면 true를 반환하는 메소드 구현
- 다음과 같은 소스로 클래스 Person을 점검

		Person p1 = new Person("홍길동");
		System.out.println(p1.equals(new Person("홍길동")));
		System.out.println(p1.equals(new Person("최명태")));

출력값:

true
flase

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Person {
 
    private String name;
 
    public Person(String name) {
        this.name = name;
    }
 
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Person) { // 형변환 가능한지 묻는 것
 
            Person person = (Person) obj;
            if (this.name.equals(person.name)) {
                return true;
            }
        }
        return false;
    }
}
 
public class Question4 {
    public static void main(String[] args) {
        Person p1 = new Person("홍길동");
                        // equals를 오버라이딩 하지 않으면 주소값끼리 비교한다.
        System.out.println(p1.equals(new Person("홍길동")));
        System.out.println(p1.equals(new Person("최명태")));
 
    }
 
}
 
cs

 

 

 

 

 


5. 다음 조건을 만족하는 클래스 String의 객체 이용 프로그램을 작성하여 
메소드 equals()와 연산자 == 의 차이를 비교 설명하시오.

		String s1 = new String("java");
		String s2 = new String("java");
		String s3 = s2;

		System.out.println(s1 == s2);
		System.out.println(s1.equals(s2));
		System.out.println(s2 == s3);
		System.out.println(s2.equals(s3))


순서대로 false, true, true, true가 출력된다.

==는 주소값 비교이며 .equals는 문자열 비교이다.

 

s1의 문자 "java"와 s2의 문자 "java"는 글자형태는 java로 같으나 new로 인해 메모리에 올라간 주소값은 다르다.

따라서 s1과 s2를 ==의 연산자를 사용하여 비교하면 둘은 다르다는 false 값이 출력된다.

 

반면, s1과 s2의 문자열을 비교하는 .equals메소드를 사용하면 java라는 글자형태는 동일하므로 둘은 같다는 true 값이 나오게 된다.

 

s3=s2는 문자열도 메모리 주소도 같다는 뜻이므로 ==연산자 비교나 .equals 메소드 어느 것으로 해도 s3과 s2를 비교하면 같다는 true값이 출력된다. 

 

 

 

 


6.아래를 정리하시오.

 - 프로토콜
 - DNS
 - 포트 번호

https://www.naver:80.com 를 예로 들면

 

1) 프로토콜: https

통신규약이라고도 부르며 끝에 'p'가 붙으면 protocol이라고 생각하면 된다.

Http, FTP, SMTP, POP, DHCP가 있다.

 

2) DNS: www.naver.com

도메인이라고도 불리는 Domain Name System은 컴퓨터가 읽을 수 있는 ip주소로 도메인을 변환하는 것이다.

 

3) Port 번호: 80

포트번호는 생략하는 경우가 많은데 프로그램 번호라고 이해하면 된다.

해당 컴퓨터를 찾아가서 80번이면 80에 해당되는 프로그램을 실행한다는 의미이다.

 

 

 



7. 지네릭에 관하여 예습 하시오.

영어로 General이란 '일반적, 보편적'이라는 뜻을 가지고 있다.  여기서 유추할 수 있듯이 자바 Generic 또한 일반적이고 보편적인 쓰임새가 있는 것이다. 제네릭은 데이터 형식에 의존하지 않고 하나의 값이 여러 데이터 타입을 가질 수 있도록 하는 방법이다. 보통 문자열을 출력하고자 하면 String을 사용하고 정수를 뽑아내고자 한다면 Int(혹은 Integer)를 사용한다. 그러나 문자열도, 숫자도 동시에 뽑아내고 싶을 땐 어떻게 할까? 

그럴 때 Generic이라는 것을 사용하는 것이다. 

자세한 것은 다음 수업 때 알아보도록 하자.

 

'면접준비 > KOSMO 허쌤 숙제' 카테고리의 다른 글

학습정리-11-03  (0) 2021.11.03
학습정리-11-02(compareTo)  (0) 2021.11.02
학습정리-10-29  (0) 2021.10.29
학습정리-10-28(Error와 Exception)  (0) 2021.10.28
학습정리-10-27 (사칙연산 계산기)  (4) 2021.10.27
댓글