** 기본형 변수 / 참조형 변수
기본형 변수 : 실제 값을 저장
참조형 변수 : 실제 값이 저장되어 있는 주소를 값으로 가짐.
1) 논리형 : boolean
2) 문자형 : char
3) 정수형 : byte, short, int, long
4) 실수형 : float, double
** 클래스의 생성자(Constructor)는 단순히 인스턴스 초기화 메소드이지, 인스턴스를 직접 생성하는 것은 아님
--> 인스턴스를 생성하는것은 자바 JVM의 역할
--> 모든 new가 들어가는 연산은 JVM을 통해 수행되어 메모리를 할당하는 것
** 자바의 객체지향 흐름에서 super()는 암시적으로 컴파일러가 실행을 한다.
즉 객체 생성시 부모 호출 -> 자식 호출 순서로 이루어지기 때문에 자바 JVM 콜 스택에 가장 마지막으로 들어가는 것은 Object일 것이다.
이유는? 자손이 오버라이딩을 통해 부모와 다른 행동을 할 수 있기 때문에
하지만 부모클래스에서 기본생성자가 없다면 명시적으로 super(int x)와 같이 인자가 있도록 호출을 하거나,
부모 클래스에서 기본 생성자 코드를 작성해둬야함.
** 클래스의 앞에 final을 붙이면 자식을 생성할 수 없는(다른 클래스가 상속 받을 수 없는) 클래스로 만들어진다.
** 추상 클래스는 인스턴스를 생성할 수 없다(Abstract)
** 접근제어자 (access modifier)는 객체지향 프로그래밍의 장점 중 하나인 정보은닉이며
클래스 내부에 선언된 데이터를 보호하고, 불필요한 내용을 외부로 유출하지 않기 위해서이다.
** 형변환
ex) class tv , class extv extends tv
tv a = new extv(); << 불가능
extv b = new tv(); << 가능
- 그이유는 참조변수 extv형인 b가 사용할 수 있는 멤버개수가 tv보다 많기 때문임
즉, 참조변수가 사용할 수 있는 멤버의 개수가 인스턴스 멤버 개수보다 같거나 적어야 가능
자손타입 -> 조상타입(Up-Casting) : 형변환 생략 가능
자손타입 -< 조상타입(Down-Casting) : 형변환 생략 불가
ex) Class Car, Class FireCar extends Car, Class AMB extends Car
Car car = new FireCar() <<- 가능 / 업캐스팅 / 형변환생략 가능
---> 가능한 이유? 참조변수인 car의 멤버 변수가 인스턴스변수인 FireCar보다 적거나 같기 때문
FireCar fa = new Car() <<- 불가능 / 다운캐스팅 / 형변환 생략 불가
FireCar fa = (FireCar)car << - 가능 / 다운캐스팅 / 형변환 명시
Animal myPet1 = new Dog();
Animal myPet2 = new Cat();
myPet1.makeSound(); // "멍멍!" 출력
myPet2.makeSound(); // "야옹!" 출력
이런식으로 어떤 형태의 동물이 들어올지 모를 떄, 추상적인 Animal을 받도록 하고 instanceof를 사용해 그에 맞게 다형성을 실현할 수 있다.
** 추상 클래스 ---> abstract를 메소드와 클래스 앞에 붙이기
ex) abstract class test{} //// abstract void test(int a); void test(println~~~) <<-- 몸통이없는 메소드와 일반 메소드 둘 다 사용 가능
- 추상클래스를 상속받은 하위클래스는 추상클래스의 추상 메소드를 모두 구현하여야함
--> 안하면 상속받은 하위 클래스도 추상 클래스로 처리
** 인터페이스
- 인터페이스는 다른 클래스로부터 다중 상속을 받는 것이 가능함
- 인터페이스는 추상클래스와 달리 멤버를 초기화하거나 일반 메소드를 선언할 수 없이 무조건 추상으로 해야함
- 인터페이스를 클래스가 상속받을 경우, 무조건 인스턴스의 메소드를 구현해야함. 안그러면 오류 발생
- 인터페이스의 장점
1) 개발시간 단축
2) 표준화 가능
3) 서로 상관없는 클래스간의 관계를 맺는게 가능
4) 독립적인 프로그래밍이 가
'JAVA' 카테고리의 다른 글
예외 처리(Try-Catch) (1) | 2024.02.04 |
---|---|
1) JAVA의 장점 (0) | 2023.12.26 |