콘텐츠로 건너뛰기
Home » Blog » 자바 클래스, 다형성과 추상화

자바 클래스, 다형성과 추상화

  • java

클래스와 객체, 인스턴스

클래스

  • 객체(object)를 만들어내기 위한 틀
  • 만들어 낼 객체의 속성과 메서드의 집합을 담아놓은 것

객체

  • 클래스로부터 만들어지는 실체
  • 클래스로 선언된 변수

인스턴스

  • 객체가 메모리에 할당이 된 상태
  • 런타임에 구동되는 객체를 의미 (객체와 같은 의미로 쓰이기도 함)
Person a = new Person(); <em>// 객체 -> 인스턴스</em>
Person b;<em>//객체</em>
b = new Person();<em>//인스턴스</em>

static 키워드

  • 장점 : 중복 제거
  • 단점 : 선언을 하자마자 메모리에 올라간다. → 메모리 낭비가 될 수 있다.
  • Java
    • static으로 선언하지 않은 변수 → heap 영역에 할당
    • GC가 메모리 관리 (회수)
    • static 선언 변수 : heap이 아닌 MethodArea 영역에 할당 → 종료 전까지 회수가 안된다.

오버로딩과 오버라이딩

오버로딩

  • 이름이 같아도 매개변수 개수, 타입, 순서를 다르게 해서 같은 이름으로도 여러 개의 함수를 정의 할 수 있는 것
  • 프로그램의 유연성을 높이고 결과적으로 코드를 깔끔하게 하는 효과가 있으며 같은 클래스 내에서 사용
class Calculator {
	void multiply(int a, int b) {
		System.out.print("결과는 : " + (a * b) + "입니다.");
	}
	void multiply(int a, int b, int c) {
		System.out.print("결과는 : " + (a * b * c) + "입니다.");
	}
	void multiply(double a, double b) {
		System.out.print("결과는 : " + (a * b) + "입니다.");
	}
}

오버라이딩

  • 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의하는 것
  • 상속 관계 클래스에서 사용되며 static, final로 선언한 메서드는 오버라이딩이 불가능
interface Animal {
	void eat();
}

class Person implements Animal {
	@Override
	void eat() {
		System.out.println("먹는다.");
	}
}

추상화

  • 복잡한 데이터, 구조, 시스템 등으로부터 핵심만을 가려내 덜 자세하게 만드는 것
  • 세부사항, 절차 등을 감추고 인터페이스 등을 만드는 것으로 복잡도를 낮추는 방법

데이터 추상화

  • 어떠한 데이터들의 공통점만을 모으고 차이점은 버린다.
  • 예를 들어 고양이, 강아지, 원숭이 등의 객체들을 공통적인 특징들을 묶어 동물이라는 카테고리로 카테고리화 시킨다.

프로세스 추상화

  • 어떠한 내부 프로세스를 숨기는 것을 의미
  • 예를 들어 데이터베이스가 어떻게 데이터를 저장하는지는 모르지만 단순하게 insert, upsert 등의 쿼리로 데이터를 저장할 수 있다.