Java-자료구조 1주차(1-2)객체지향 프로그래밍

김메로·2022년 7월 23일

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

  1. Object Oriented Programming

(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) '상속'의 특징

  • 각각의 클래스는 하나만 상속 가능(by Java)
  • 상속받은 클래스의 정보만 가지고 있다
    =>상속되지 않는 영역에 있는 클래스 내 변수나 메소드에 대해서 알 수 없다.
  • 상속받은 클래스의 공간도 함께 할당된다
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. Comparable interface(객체 비교)

(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. Generic Programming

목적:코드 1개를 다른 자료형(객체,int,String...)에서도 사용가능하게 만드는 것

  • Object로 객체를 작성하면 메모리에 주소 변화가 일어나지 않아서 모든 객체 내 변수나 메소드 사용이 가능하다 -> 이를 가지고 Generic Programming 실시
  • 매개변수화 Type
    :꺾쇠괄호<> 안에 Type Parameter를 넣어 컴파일 시 구체적인 타입이 결정되도록 하는 방법(목적:Generic Programming 구현)

-매개변수 자료형 객체 생성: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 관련 블로그 모음]

  1. Autoboxing
  • 기본 자료형 - 자료형에 해당하는만큼 메모미 할당[ex)-int,char,...]
  • 객체 - 객체를 정의할 때 객체에 해당하는 만큼의 공간과 포인터(4Bytes)을 Heap에 할당한다[ex)Integer,Char,...]

===> 이로 인해 기본 자료형으로 받으면 기본 자료형은 객체가 아니므로 객체 메소드는 상속받지 않는다. 만약 상속받고 싶다면 Wrapper class로 할당받으면 된다.(Wrapper class-기본 자료형의 객체버전)

  • Autoboxing - 기본자료형과 객체 모두가 존재하는 경우, JVM이 사용에 따라 코드 내에서 바꾸는 것(보통 기본자료형 -> 객체로 자동전환)

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]

  1. 예외(java.lang.Exception사용)
  • 예외 상황이 발상하는 경우, Exception클래스를 상속하여 처리한다.
    ex)
// Exception 클래스 상속
public class FileFormatException extends Exception{
	public FileFormatException (){
		// super 호출
		super();
	}
	public FileFormatException (String s){
		super(s);
	}
}
profile
완벽보다는 완성을 목표로!

0개의 댓글