본문 바로가기
JAVA

2) 변수

by person456 2023. 12. 26.

** 기본형 변수 / 참조형 변수

기본형 변수 : 실제 값을 저장

참조형 변수 : 실제 값이 저장되어 있는 주소를 값으로 가짐.

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