본문 바로가기
JAVA

자바상식

by Coding_mon 2023. 12. 21.

1. 클래스를 사용할때 new는 왜 사용하는가?
클래스를 인스턴스화 할때 new 키워드를 사용
new를 사용하면 객체를 실제 메모리에 장소를 만들어 사용할 수 있게 해준다

- 메모리 할당 : new를 사용하면 java는 Heap의 새 객체에 메모리를 할당함, 객체를 Heap에 저장하면 수명이 길어짐
- 생성자 호출 : new키워드 뒤에는 클래스 생성자가 호줄이 됨 -> 객체가 초기화 되어 초기 상태가 설정 됨 -> 인수를 취하며 객체에 초기 값을 전달할 수 있음
- 인스턴스 생성 : new를 사용하면 클래스의 인스턴스가 생성 : 인스턴스는 고유한 데이터(속성) 및 메소드(함수) 세트를 포함하는 클래스의 개별 구현 -> 이를 통해 각각 고유한 상태를 갖는 동일한 클래스의 여러 객체를 생성가능
- 유형지정 : new를 사용할 때 생성 중인 객체의 유형을 명시적으로 지정 -> 이는 해당 유형에 유효한 객체에 대해서만 작업을 수행하도록 보장

ex) Car myCar = new Car(); 라고 선언하는 경우
> Heap의 Car 객체에 대한 메모리 할당
> Car 클래스의 생성자를 호출하여 myCar 객체를 초기화
> myCar는 Car 유형이고 Car 클래스에 정의된 모든 메서드와 속성을 사용할 수 있음을 선언

* new가 없으면 객체지향 프로그래밍의 기본 개념인 클래스의 인스턴스를 만들 수 없음
* 실제 메모리에 만들어진 실체를 객체 또는 인스턴스라고 한다
* 클래스를 사용해서 원하는 종류의 데이터 타입을 마음껏 정의할 수 있다.
* Car myCar는 Car 타입을 받을 수 있는 변수를 선언한다는 뜻 이다.

2. 클래스를 사용하는 순서

1) 변수 선언 : 클래스 타입을 받을 수 있는 변수를 선언
2) 객체 생성 : new 키워드를 사용하여 새로운 객체(인스턴스를 ) 메모리상에 생성 -> 멤버변수를 저장할 메모리공간도 같이 생성
3) 참조값 보관 : 객체를 생성하면 자바는 메모리 어딘가에 있는 객체에 접근할 수 있는 참조값(주소)를 반환한다.
4) 객체 연결끊기 : 객체에 null을 할당하면 객체의 연결이 끊긴다 -> 더이상 객체사용불가

3. static 키워드
> 클래스의 속성과 메서드에 static 키워드를 사용하면 어디서나 속성과 메서드를 공유할 수 있다.

4. 상속 extend 키워드
> 부모를 상속받은 자식에서는 부모의 멤버변수와 메서드를 사용할 수 있다.
> 상위 클래스를 호출할때는 super키워드를 사용한다.

5. 최상위 클래스는 Object 클래스 이다
> 모든 클래스는 Object 클래스를 상속 받는다

6. 내부클래스 사용방법
1) static 선언을 하지 않은 내부클래스 사용방법
> 외부클래스 변수를 먼저 선언한 후 외부클래스변수.new 키워드를 선언하여 사용한다
ex) 외부클래스.내부클래스 {내부클래스변수명} = {외부클래스}.new 내부클래스
2) static 지정이 된 내부클래스 사용방법
> 바로 new 키워드를 사용하여 인스턴스 생성이 가능하다
ex) 외부클래스.내부클래스 {내부클래스변수명} = new 외부클래스.내부클래스

7. 인터페이스 키워드 implements 를 사용하는 이유?
> 클래스와 달리 객체를 생성할수 없다.
> 클래스에서 구현해야 하는 작업명세서이다.
> 객체가 다양한 자료형(타입)을 가질 수 있기 때문!
* 기본적으로 인터페이스의 모든 method는 public이다.

8. 추상클래스
> 인터페이스와 비슷한 형태로 구체화되지 않은 멤버를 이용해서 클래스를 만듦.
> 클래스의 공통된 부분을 뽑아서 별도의 클래스(추상클래스)로 만들어놓고 이것을 상속해서 사용

9. JAVA에서 String 객체
> 문자열을 다루는 String 클래스(객체)는 데이터가 변경되면 기존의 객체를 버리고 새로운 객체를 메모리에 생성한다
> 기존의 객체는 GC에 의해서 메모리가 회수된다

10. StringBuffer, StringBuilder
> String클래스의 단점을 보완한 클래스로 데이터가 변경되면 메모리에서 기존 객체를 재활용한다.
* 속도 : StringBuilder
* 데이터안정성 : StringBuffer

댓글