-
[자바로 구현하고 배우는 자료구조] 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); } }
'스터디플래너 > 복습하기' 카테고리의 다른 글
[자바로 구현하고 배우는 자료구조] 2.선형 자료구조(연결 리스트&배열)(1) (0) 2021.10.11 [드림코딩 by 엘리] 자바스크립트 기초 강의(2) (0) 2021.10.11 [드림코딩 by 엘리] 자바스크립트 기초 강의(1) (0) 2021.10.10 [자바로 구현하고 배우는 자료구조] 1.자바 특성 및 알고리즘 기본(1) (0) 2021.10.09 모두를 위한 컴퓨터 과학(CS50 2019) 완강 (0) 2021.10.04