자바 Day 4

Hyunsu·2023년 3월 23일
0

Today I Learned

목록 보기
4/37
post-thumbnail

오늘은 Chapter 10 상속부터 Chapter 12 Object 클래스까지 공부했다.
처음 자바를 배울 때는 객체와 상속 다형성의 개념이 잘 와닿지 않았지만 이제는 처음에 비해 많이 감이 잡히는 것 같아 다행이다.

📝 목차

  1. 상속
  2. API
  3. Object 클래스

1. 상속

다형성이란 다양한 형태를 가지는 성질을 의미하며 형 변환을 하더라도 실제 호출되는 것은 원래 객체에 있는 메서드가 호출되는 것을 말한다. 상속을 통해 오버라이딩을 할 수 있고 다형성이 이루어진다.

상속과 다형성 개념을 이용해서 동물 관리를 해보았다. 직접 문제를 풀어보면서 재미를 느낄 수 있었다 🎈

public class Animal {
	String name; // 이름
	String kind; // 종류
	int legCount; // 다리 개수
	int iq; // 지능
	boolean hasWing; // 날개 존재 여부
	
	public Animal() {}
	public Animal(String name, String kind, int legCount, int iq, boolean hasWing) {
		this.name = name;
		this.kind = kind;
		this.legCount = legCount;
		this.iq = iq;
		this.hasWing = hasWing;
	}

	public static void main(String[] args) {
		Animal cat = new Cat("rara", "Persian", 4, 50, false, 5);
		Animal dog = new Dog("candy", "Chichu", 4, 40, false, 7);
		cat.move(); // 4.5kg
		cat.eatFood(); // 4.8kg
		cat.eatFood(); // 5.1kg
		Cat c = (Cat)cat;
		System.out.println("*** 고양이 정보 ***");
		System.out.println(cat.toString());

		System.out.println();
		
		dog.move(); // 6.6kg
		dog.eatFood(); // 6.8kg
		dog.eatFood(); // 7.0kg
		Dog d = (Dog)dog;
		System.out.println("*** 강아지 정보 ***");
		System.out.println(dog.toString());
	}
	
	public void move() {}
	public void eatFood() {}
	
	@Override
	public String toString() {
		return "[이름 : " + name + ", 종류 : " + kind + ", 다리 개수 : " + legCount + ", 지능 : " + iq + ", 날개 여부 : " + hasWing;
	}
	
}

Animal 클래스를 상속받은 고양이 클래스를 만들어보았다.

public class Cat extends Animal {
	double catKg; // 몸무게

	public Cat(String name, String kind, int legCount, int iq, boolean hasWing, double catKg) {
		super(name, kind, legCount, iq, hasWing);
		this.catKg = catKg;
	}

	public void move() {
		catKg -= 0.5;
	}
	
	public void eatFood() {
		catKg += 0.3;
	}
	
	@Override
	public String toString() {
		return super.toString() + ", 몸무게 : " + catKg + "]";
	}
}

2. API

Application Programming Interface 의 약자로 애플리케이션에 선언되어 있는 클래스와 메소드에 대한 상세한 설명이 포함된 문서이다.

API 문서를 보면서 개발을 할 때 Since 와 See also 를 꼭 확인해야한다.

  • Since : 해당 클래스가 JDK 에 추가된 버전을 명시
  • See also : 그 클래스와 관련되어 있는 모든 클래스나 인터페이스 및 메소드 등의 링크 제공

예를 들어 JAVA 17 기반 시스템을 만드는데 JAVA 16 문서를 보면서 개발하면 컴파일이 제대로 되지 않는 경우가 발생할 수 있다. 생소한 메서드가 있으면 API 를 확인하면서 개발하는 습관을 들이면 좋다. 그 중 Method Summary 는 개발하며 가장 많이 봐야하는 부분이다.

참고로 deprecated 는 이제 사용하지 않는 것들인데 이것을 그대로 놔두는 이유는 java 버전이 올라갔을 때 메서드를 그냥 삭제해버리면 버전이 업그레이드 되었을 때 문제가 발생할 수 있기 때문이다.


3. Object 클래스

모든 클래스의 최상위 클래스는 Object 클래스이다.
Object 클래스에는 toString 및 equals 와 hashCode 등 다양한 메서드가 있으며 이를 오버라이딩해서 적절하게 사용할 수 있다.

equals 와 hashCode 는 세트라고 생각하고 equals 를 재정의했다면 hashCode 도 재정의해주어야 두 객체를 제대로 비교할 수 있을 것이다.


Reference

profile
현수의 개발 저장소

0개의 댓글