팁 작성에 앞서, 개념을 알기는 하지만 놓칠 수 있는 부분들이나 다시 한 번 복기하면 좋을만 한 것들을 정리해둔 것이기 때문에
처음 공부하시는 분들에게는 적절하지 않을 수 있습니다.
✶ 객체지향언어 TIP(1)
*객체지향언어 장점
- 재사용성
- 관리 용이
- 신뢰성
*거시적 관점에서 프로그래밍하는 능력이 요구된다.
*클래스 : 객체를 정의해 놓은 것
객체 : 정의된 내용대로 메모리에 생성된 것
*객체 : 속성 + 기능 (속성&기능 : member)
- 속성(property) : 변수(variable)로 표현
- 기능(function) : 메서드(method)로 표현
*인스턴스화(instantiate) : 클래스로부터 객체를 생성하는 것.
생성된 객체를 인스턴스(instance)라고 한다.
- 인스턴스는 참조변수를 통해서 다룰 수 있다.
*한 소스파일 내에 public class는 단 하나만 존재해야하며 소스파일과 이름이 같아야 한다.(대소문자까지 일치해야 한다.) 여러 개의 클래스가 존재할 수는 있다.
- 소스파일과 달리 클래스파일은 클래스마다 하나씩 만들어진다.
*객체 또한 배열로 다루는 것이 가능하다.
*선언 위치에 따른 변수 종류
- 클래스 변수(static) : 객체 선언 없이 “클래스명.”으로 변수 및 메서드 사용 가능
- 인스턴스 변수
- 지역 변수 : 클랙스 영역 이외의 영역(메서드, 생성자, 초기화 블럭 내부)
*메서드의 매개변수 부분에서도 자동 형변환이 된다.
*원래 반환값의 유무에 관계없이 모든 메서드에는 return 문이 존재해야 하지만 void의 경우 컴파일러가 자동적으로 마지막에 추가해주기 때문에 생략이 가능한 것이다.
*호출스택(Call Stack)
메서드의 작업에 필요한 메모리 공간을 제공하고 작업이 마무리되면 메모리 공간은 다시 반환된다.
*메서드 호출 시, 기본형(Primitive type) 매개변수는 변수의 값을 받아서 읽기만 가능하다. 하지만 참조형(Reference type)이면 인스턴스의 주소가 복사되기 때문에 읽는 것 뿐만 아니라 변경까지 가능하다.
*메서드의 반환타입으로 당연히 참조형도 가능하다.
*멤버 변수 : 클래스 변수(static 변수) + 인스턴스 변수(객체 생성 필요)
*인스턴스 메서드 : 객체를 생성하여 인스턴스 변수로 작업 수행 가능
클래스 메서드 : 매개변수만으로 작업 수행 가능
*클래스의 멤버 중 모든 인스턴스에 공통적으로 적용되는 값을 가져야 하는 것이 있는 경우 static을 붙여준다.
*static 메서드는 인스턴스 변수를 사용할 수 없고 인스턴스 메서드를 호출할 수 없다.
*Overloading
한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것. 단, 매개변수의 개수 또는 타입이 달라야하며 순서만 달라도 다른 것으로 취급한다. 반환 타입은 상관 없다.
*Constructor(생성자)
→ 인스턴스가 생성될 때 호출되는 ‘인스턴스 초기화 메서드’
- Void 메서드와 같이 리턴 값이 없는 것은 비슷하지만 void를 따로 적어주지 않고 이름이 클래스의 이름과 같아야 한다.
- 여러 개의 생성자 존재 가능
- 생성자 정의가 없을 시 기본 생성자가 자동 생성
- 기본생성자란 매개변수도 없고 내용도 없는 생성자이다.
- 만약 기본 생성자 외에 다른 생성자를 추가했다면 상속 관계에 있거나 인스턴스를 생성해서 사용할 때 에러가 발생할 경우가 많으니 습관적으로 기본 생성자를 추가해주는 것이 좋다.
*this() : 생성자이다. 다른 생성자 호출할 때 사용
- 클래스 이름 대신 this 키워드 사용
- 반드시 첫 줄에서만 호출 가능
*this : 객체 자신을 가리키는 참조변수
*멤버변수 초기화
1) 명시적 초기화 : 선언과 동시에 초기화
2) 초기화 블럭
- 클래스 초기화 블럭 : static{ }
→ 처음 로딩될 때 한 번 실행
- 인스턴스 초기화 블럭 : 그냥 { }
→ 인스턴스가 생성될 때 마다 실행
*초기화 블럭은 명시적 초기화만으로는 처리하기 힘든 복잡한 구문의 경우에 유용하다.
*인스턴스마다 개별적인 값을 가져야 하는 변수는 인스턴스 변수, 모든 인스턴스가 공통적인 값을 가져야하는 변수는 클래스 변수(static 변수)로 선언해야한다.
*생성자는 객체를 초기화하는 역할이고 객체를 생성하는 것은 ‘new’ 연산자이다.
*this 참조변수는 인스턴스 메서드에서만 사용 가능하고 클래스 멤버에는 사용할 수 없다.
*오버로딩에서 리턴 타입은 영향력이 없다. 이름이 같고 매개변수의 개수 또는 타입이 다르면 된다.
*초기화 순서
- 클래스 변수 : 기본값 → 명시적 초기화 → 클래스 초기화 블럭
- 인스턴스 변수 : 기본값 → 명시적 초기화 → 인스턴스 초기화 블럭 → 생성자
'Java > Grammar' 카테고리의 다른 글
예외처리 TIP (0) | 2022.12.16 |
---|---|
객체지향언어 TIP (2) (1) | 2022.11.30 |
배열 TIP (0) | 2022.11.04 |
조건문 & 반복문 TIP (0) | 2022.10.24 |
연산자 TIP (0) | 2022.10.24 |
댓글