최상위 클래스 Object란
자바에는 최상위 클래스 Object라는개념이 존재한다. 내가 임의로 만든 모든 클래스는 전부 extends Object한다
ex) println() 가능함
객체가 println()의 인자로 작성되어있다면.toString()을 자동호출한다 호출할때는 오버라이딩 된상태로 출력된다
@Override
public String toString() {
return this.type+":"+this.area;
}
연산자의 대상은 원시타입들( boolean int double)로 객체수준인 String, Object과 애들은 비교가 불가하다
따라서 equals()를 사용한다 contains()는 비교가아님 포함으로 정확히 비교해야할때는 equals()사용해야한다
최상위 클래스 Object가 크기비교연산자 대신으로 사용할.equals() 메서드를 제공해주고있다
Object 객체를 equals()로 비교하기 위해서는 클래스명을 선언하고 형변환을 해야하는데 클래스의 크기보다 오브젝트의 크기가 더크기 때문에 오류가난다 해결방법으로는 obj앞에 ()안에 클래스명을 적어서 obj가 클래스안에 속해있다는것을 알려주면된다
이것을 강제형변환/다운캐스팅이라고 한다 형 변환 전 항상 형 변환 가능 여부를 체크해야 합니다
왼쪽에는 바꿀것과 instanceof 연산자를 사용하여 오른쪽에는 변환할 값을 넣어줘야한다

추상화의 개념
내가 가진 코드중에 네모,세모, 원 클래스가 있었는데, 나중에 하트클래스를 만들려고 보니 상속받을 공통 부모 클래스가 없다는 것을 발견한다 따라서 모양이라는 상위클래스를 만들어야하는데 이때 abstract키워드를 사용한다
abstract을 사용해서 만든 클래스를 추상클래스라고 하는데 추상클래스의 목적은 붕어빵틀(클래스)을 만들기 위한 틀을 만드는것으로 붕어빵(객체)와는 무관하다 추상클래스는 객체화시킬수 없고 붕어빵의 틀을 만든는것이 목적이다
예시
abstract 포켓몬
class 피카츄
객체 피카츄 5
객체 피카츄 10
class 고라파덕
객체 고라파덕 성격01
객체 고라파덕 성격02

추상메서드
Shape 클래스에 draw() 메서드를 정의했으나, 모든 자식 클래스가 이를 오버라이딩하여 부모의 draw()를 볼 수 없는 상황이 발생했습니다.이러한 메서드가 실현될 가능성이 없거나,코드만 차지하는 것을 막기 위해 메서드 앞에 abstract 키워드를 붙인다
특징으로는 내용이 없어서 바디{}를 적지않아도 되고 메서드 오버라이딩이 강제된다
draw 앞에 abstract가 붙으면, 자식 클래스는 반드시 이 메서드를 구현(오버라이딩)해야 하고 그렇지 않으면 에러가 발생한다
이 에러의 해결방법으로는 오버라이딩하지 않은 메서드를 추가하거나 abstract에 합류하는 것이다
인터페이스
핸드폰을 만들때 아이폰과 갤럭시라면 두회사가 제품을 공유하지 않는데 이때 소비자가 핸드폰을 교체했을때 기존의 코드를 다 뜯어고쳐야한다면 소비자의 불편이 가중되므로 유입을 받기위해 메서드 명을 맞추는게 좋다 이때 인터페이스를 만들수 있고 메서드명에대한 가이드를 줄수 있다
즉 인터페이스란 모든 메서드들의 추상메서드 이고 모든 메서드는 public이다 인터페이스 사용시 코드결합도를 낮추는데 큰역할을한다
public interface Phone {
abstract public void powerOn();
abstract public void powerOff();
abstract public void soundUp();
abstract public void soundDown();
}
이클립스의 new -> interface 생성하고 메서드명을 적은뒤 호출할때는 임플리먼츠를 사용한다
인터페이스를 타입취급하면 뉴로 호출할때 뒤에 이름만 바꿔주면 사용가능하다
임플리먼츠를 모든클래스에서 받아준다
'🐢 꼬부기 LV.1 | 개념•기초 > 💧물대포(핵심개념)' 카테고리의 다른 글
| mvc 디자인 패턴 개념정리 (0) | 2025.10.24 |
|---|---|
| 컬렉션 프레임워크와 예외처리 (0) | 2025.10.22 |
| 상속/protected/super/오버라이딩/다형성/동적바인딩 (0) | 2025.10.20 |
| 선택정렬,삽입정렬,이진탐색 (0) | 2025.10.19 |
| setter와 getter 사용법 (0) | 2025.10.19 |