1. static 키워드로 선언된 정적 멤버(메서드, 변수)는 클래스 내부에 저장 공간을 가지고 있기 때문에 객체 생성 없이 곧바로 사용 가능 → 따라서 static 내에서는 static 변수/메서드만 사용가능함
2. 모든 메서드를 static으로 사용하는게 좋을 때가 있음(ex. Math)
- 인스턴스 변수가 없음. 값을 받아서 처리만 하면 되는 경우
- 메모리 절약 : 다른 곳에서 메서드를 참조하기 위해 메모리를 차지하는 인스턴스를 만들 필요가 없음
- 객체 간의 결합성을 낮추고 클래스의 활용성을 높임
⇒ 즉, 굳이 인스턴스화 시킬 필요가 없을 때는 static 을 사용해보자!
3. 명명 규칙 : 클래스명 - 대문자 시작/ 메서드명 - 소문자 시작
“객체지향” 프로그래밍 언어
→ 결합도(코드들이 서로 연관된 정도)를 합리적인 수준으로 유지 → 변화와 확장에 유연해짐
클래스 개요 (자바의 실행 최소 단위 - 메서드가 아님, 클래스)
- 객체 : 속성과 기능 (개념), 클래스를 통해서 만들어지며, 객체를 만들기 위해서는 클래스를 먼저 정의해야 함
- 클래스 : 객체가 가져야할 속성과 기능을 정의할 수 있는 문법요소
- 인스턴스 : (일종의 객체) 클래스를 통해 만들어져 메모리상에 존재하는 것. 객체가 실제로 메모리에 상주하고 있는 상태(사용될 수 있는 상태)
인스턴스 생성하기 : 클래스 타입으로 선언과 초기화함
클래스명 참조_변수명; // 인스턴스를 참조하기 위한 참조변수 선언 참조_변수명 = new 생성자(); // 인스턴스 생성 후, 객체의 주소를 참조 변수에 저장 클래스명 참조_변수명 = new 생성자();
Person person1; //선언 -> 객체 person1 = new Person() // 초기화 -> 인스턴스 //Person() -> 생성자, 메서드는 아니지만 메서드 처럼 사용
- 참조변수 : 실제 데이터가 저장되어 있는 힙 메모리의 주소값
- new : 생성된 객체를 힙 메모리에 넣으라는 의미
클래스의 구성요소 (필드, 메서드, 이너클래스)
- 필드(속성) : 객체의 속성 또는 데이터를 저장하는 일종의 변수
- 인스턴스 변수(필드 ㅇ) : 객체의 고유한 속성을 저장할 때 사용, 객체를 만든 다음에 사용할 수 있음
- 클래스 변수(필드 ㅇ) : static , 클래스로 생성된 인스턴스 변수가 가지는 공통적인 변수
- 지역 변수(필드 x) : 위 두가지 변수 외 전부, 직접 초기화 필요
class Person {//클래스 영역 static ~ //클래스 변수(모든객체 동일) int ~ //인스턴스 변수 void example(){//메서드 영억 int ~ //지역변수 } }
- 힙 메모리에는 빈공 간이 저장될 수 없기 때문에 이곳에 저장되는 필드는 강제초기화되지만, 스택 메모리는 강제로 초기화되지 않으므로 지역변수 선언시 반드시 초기화 실행
- 지역변수는 스택 메모리에 저장되어 메서드 종료와 동시에 소멸되며, 스택에 저장된 경우 한동한 사용되지 않으면 가상머신에 의해 자동으로 삭제됨
- 메서드(기능)
- 메서드 오버로딩: 하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것
- (JVM)은 기본생성자를 내장하고 있음
- 커스텀 생성자가 한개라도 있으면 기본 생성자는 명세해야 함
- 생성자의 이름은 반드시 클래스 이름과 같아야하며, 리턴타입이 없음
- this() : 자신이 속한 클래스에서 다른 생성자를 호출하는 경우 사용. 반드시 생성자의 내부에서만 사용할 수 있으며, 첫 줄에 위치해야 함.
- this : 인스턴스 자신을 가리키며, this를 통해 인스턴스 자신의 변수에 접근가능
- 내부 클래스(Inner Class) : 클래스 내에 선언된 클래스
class Outer { // 외부 클래스 class Inner { // 인스턴스 내부 클래스 } static class StaticInner { // 정적 내부 클래스 } void run() { class LocalInner { // 지역 내부 클래스 } } }
Q. 메인 클래스 내의 메인 메서드 , 클래스 내의 메인 메서드 차이?
A. 메인은 진입점이 되는 메서드.
하나의 패키지 안에 여러개 클래스에 각각 메인 메서드가 있더라도 클래스 간에 결합도가 없으면 상관없음.
main의 경우 static main을 통해 main이 메모리 영역에 항상 상주하도록 하여 프로그램 시작점을 인지할 수 있도록 함.
Q. 필드 : 메서드 내의 변수 → 변수라는 말은 자바에서 안쓰나?
A. 클래스변수 = static 변수, 인스턴스 변수만 필드라고 하고, 지역변수는 변수라고 함.
'Coding > 언어-JAVA' 카테고리의 다른 글
JAVA 인터페이스 #Day4 (0) | 2023.08.03 |
---|---|
JAVA : 상속, 캡슐화, 다형성, 추상화 #Day3 (0) | 2023.08.02 |
JAVA 기초 : 변수(기본타입, 참조타입) #Day1 (0) | 2023.08.01 |
JAVA 환경구성 하기 (0) | 2023.08.01 |
JAVA 스터디 시작 (0) | 2023.08.01 |