부스트코드 '자바로 구현하고 배우는 자료구조'정리
1주차 - 자바 특성 및 알고리즘 기본
[2]Java

(1) 상속(Inheritence)과 클래스(Class)
*객체의 메모리 할당
:int(4Bytes),long(8Bytes)처럼 원래 선언할 때 메모리가 자료형에 맞게 메모리가 할당된다. 이는 객체에서도 동일하게 적용한다.
Student s = new student();
만약 여기서 'new'를 통해 객체를 만들면 JVM(Java Virtual Machine)이 필요한 메모리만큼 공간을 Heap에 할당하며, 이 공간 안에 클래스[Student]와 관련된 모든 정보들을 저장한다.이 때, Heap에 있는 공간을 가리키는 포인터도 생성되어(포인트의 크기:4Byte) 할당된 공간을 가르킨다.
(2) 상속
:여러 객체 간의 관계를 표현할 때 사용한다(객체의 위치에 맞게 클래스를 할당하며, 이 위치를 알려주는 것이 상속!-2-1의 4:00분대-)
ex)
public class Person{
}
public class Student extends Person{
}
public class Undergraduate extends Student{
}
현재 위 코드에서 클래스는 상속[extends]에 의해 Undergraduate이 Student에 속하고, Student는 Person에 속한다. 여기서 상속된 클래스를 부르면 JVC는 이 클래스가 어디에 상속됐다는 걸 알고, 상속하는 클래스 내 변수와 메소드 모두 가져온다.
(Student생성->Person도 부르기)
(3) '상속'의 특징
public class Person{
}
public class Student extends Person{
}
public class Undergraduate extends Student{
}
위 클래스에서 객체로 선언을 하는 경우,
Undergraduate u = new Undergraduate; // True
Student s = new Undergraduate; // True(Undergraduate객체에 필요한만큼 공간이 할당하며 Student에 모든 정보가 저장되어 있기에 가능)
Undergraduate g = new Student; // False(힙에 Student객체만큼 공간이 할당되어 Undergraduate에 대해서는 모르는 정보가 되기에 접근 불가)
생각해보기) Person u = new Student();이라 정의하였을 때, 컴파일이 될까요?
(1) Override
*equal(): 객체 비교시, 메모리 주소 비교.
문자열 비교시, 문자열 내용 비교.
이때, 문자열 비교 시 사용된 equal()는 Object의 equal()를 오버라이드한 것.
Overriding: 어느 객체에서 메소드를 꺼내 사용하는 것
(2) Comparable Interface(compareTo()함수)
:객체에서 원하는 자료형으로 비교하기 위해 사용.
*a.compareTo(b)
=> if (a<b) {return 0보다 작은 수}
if (a==b) {return 0}
if (a>b) {return 0보다 큰 수}
목적:코드 1개를 다른 자료형(객체,int,String...)에서도 사용가능하게 만드는 것
-매개변수 자료형 객체 생성:Type 매개변수는 생성할 때 구체적으로 설계
형태)
'제네릭클래스 <적용할타입> 변수 = new 제네릭클래스<적용할타입>();'
ex)
class Cup <T>{
<T> beverage;
public <T> getBeverage() {return beverage;}
public void setBeverage(<T>beverage) {this.beverage = beverage;}
}
ex2)
매개변수화 타입으로 어떤 자료형이든 담은 제너릭 노드 생성 코드
// 제너릭 노드
class Node<E>{
E data;
Node<E> next;
public Node(E obj){ // 클래스 생성자로 클래스 명과 같게 작성
data=obj;
next=null;
}
}
참고[Generic Programming 관련 블로그 모음]
===> 이로 인해 기본 자료형으로 받으면 기본 자료형은 객체가 아니므로 객체 메소드는 상속받지 않는다. 만약 상속받고 싶다면 Wrapper class로 할당받으면 된다.(Wrapper class-기본 자료형의 객체버전)
ex)
public class Test {
private int text;
public Integer getText() {
return text; // return Integer.valueOf(text);
}
cf)UnBoxing: Wrapper class -> 기본 자료형[참고: https://jwdeveloper.tistory.com/148]
// Exception 클래스 상속
public class FileFormatException extends Exception{
public FileFormatException (){
// super 호출
super();
}
public FileFormatException (String s){
super(s);
}
}