ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자바로 구현하고 배우는 자료구조] 1.자바 특성 및 알고리즘 기본(2)
    스터디플래너/복습하기 2021. 10. 10. 23:10

    2. 자바

    2-1. 객체지향 프로그래밍

     'int i = 10;' 정수형 변수 i에 10이라는 값을 대입하면 4byte의 메모리를 사용한다. 기본자료형은 각각 boolean(1byte), char(2byte), byte(1byte), short(2byte), int(4byte), long(8byte), float(4byte), double(8byte)로 그 안에 대입하는 값이 크든 작든 모두 정해진 메모리만큼의 공간을 사용한다. 그렇다면 'Student s = new Student()로 객체를 선언하면 이 Student 객체에 대해 JVM은 4byte의 포인터를 힙 영역에 선언한다. 

     

     대학교를 생각해보자. 캠퍼스에 수많은 사람이 있다. 그중 누군가는 교직원이고 누군가는 학생이다. 학생은 학부생과 대학원생이 있다. 교직원은 부서마다 다르다. 교수도 있다. 교수 중 누군가는 강사이고 누군가는 일반 교수, 누군가는 학과장이나 명예교수일 것이다. 이를 객체지향의 개념에 대입해보면 상속을 알 수 있다. 캠퍼스 내 사람 중 누군가는 사람이면서 교수이고, 교직원이고, 학생이다. 교수 중에는 교수이면서 시간강사이거나 일반 교수일 것이다. 교직원은 사람이자 교직원이면서 부서별로 나눌 수 있고, 학생은 사람이자 학생이면서 학년이나 석사, 박사로 나눌 수 있다. 사람의 특성을 학생이 모두 받고 사람에 학생의 특성을 더해 학년이나 석사, 박사 별로 서로 다른 특징을 포함한다. 이를 상속이라 한다.상속은 다음과 같은 특징을 갖는다.

     먼저 클래스는 하나의 클래스만 상속받을 수 있다. 과거 C언어는 여러 가지 클래스를 상속받을 수 있었으나 다중 상속으로 생긴 문제 때문에 Java에서는 다중 상속을 허용하지 않는다.

     둘째로 상속받은 클래스의 정보만 갖고 있는다. 꼬리물기로 보자면 사람 - 학생 - 1학년으로 볼 수 있다. 사람 - 1학년으로 한 번에 연결할 수 있는 것처럼 보인다. 하지만 1학년이 알 수 있는 건 학생의 특성뿐이고, 학생이 아는 것 또한 사람의 속성이다.

     셋째, 상속받은 클래스의 공간을 함께 할당한다. 객체를 선언할 때 '학생 A = new 1학년();'과 같은 형식으로 선언할 수 있지만 '1학년 B = new 학생();'과 같은 형식으로 선언할 수 없다. 첫번째 문장은 1학년은 학생 클래스로부터 상속받았기 때문에 1학년 객체에서 선언한 변수와 메소드 뿐만 아니라 학생클래스의 변수도 알 수 있다. 하지만 두번째 문장은 새로 선언한 학생만큼만 알 수 있기때문에 학생을 상속받은 1학년은 알지 못하므로 사용할 수 없다.

     

    2-2. Comparable Interface

     어떤 값이 다른 값보다 큰 지 작은 지 비교할 때 사용하는 Comparable 인터페이스가 있다. 여기에는 int 자료형을 반환하는 compareTo 메소드 하나만 존재한다. 

     

    2-3. 제네릭 프로그래밍 소개

    public class ss{
    	public int[] superSort(int[] array){
    		...
    		return array;
    	}
    }

     정수형 배열을 매개변수로 받아 정수형 배열을 반환하는 메소드가 있다. 만약 정수가 아니라 문자열을 받고 문자열을 반환해야 한다면? 문자열에 쓸 메소드를 따로 만들거나 기존에 정수형을 반환하는 메소드를 문자열로 수정할 수 있다. 매번 이렇게 새로운 메소드를 만들거나 수정하는 일은 너무 번거롭다. 그래서 가장 상위에 있는 Object를 자료형으로 사용하면 코드를 재사용할 수 있다.

    public class ss{
    	//자료형을 Object로 선언하여 어떤 자료형이든 받을 수 있다.
    	public Object[] superSort(Object[] array){
        		...
    	    return array;
    	}
    }

     

    2-4. 매개변수화 타입

    제네릭 프로그래밍을 구현하는 방법에 매개변수화 타입(Parametenized Type)이 있다. public class className<E>, public void methodName(E obj), public E methodName()과 같은 형식으로 클래스, 메소드의 매개변수, 반환할 변수의 자료형을 일반화하여 사용할 수 있다.

     

    2-5. Autoboxing

     자바의 기본 자료형은 byte, short, int, long, float, double, char, boolean이 있다. 하지만 기본 자료형은 Object로 부터 상속받는 클래스가 아니므로 객체의 자료형을 선언할 때는 객체의 기본 자료형이 필요하다. 이 역할을 Wrapper class가 한다. 이때 Wrapper class는 Byte, Short, Integer, Long, Float, Double, Char, Boolean으로 기본 자료형과 비슷하지만 다르다.

     

    2-6. 예외

     이클립스에서 자바 코드를 작성하다가 컴파일 했을 때 다음과 같은 예외를 많이 봤을 것이다. NullPointerException, ArrayIndexOutOfBoundsException, NoSuchElementException 등등 우리가 본 오류는 모두 java.lang.Exception로 모두  Exception 클래스를 상속받는 클래스이다. NullPointerException이 Exception을 상속받고, Exception이 Object를 상속받은 것처럼 우리도 아래와 같이 새로운 Exception 클래스를 선언할 수 있다.

    package exceptions;
    public class FileFormatException extends Exception{
    	public FileFormatException(){
    		super();
    	}
        public FileFormatException(String s){
        	super(s);
        }
    }

Designed by Tistory.