variable scope
instance variable
1. member field, instance variable
2. 목적: 정보를 담으려고 한다(고유데이터, 상태데이터, 참조데이터) » 생성되는 객체마다 다른 값을 갖기 위해서
3. 특징: 초기값 가지고 있다 (각각의 타입이 정의하는: int - 0, float - 0.0, bloolean - false String 또는 참조타입의 기본값 - null)
4. 생성시점(memory를 갖는 시점): new라는 연산자를 통해서 heap 객체가 만들어지고 나서
static variable
1. class variable, static variable(공유자원)
2. 목적: 정보를 담으려고 한다 (생성되는 모든 객체가 공유하는 자원으로서): 객체간 공유자원
3. 특징: 접근방법: 클래스이름.static자원 (객체가 만들어지지 않은 상황에서도 접근 가능): Math.random() 또는 참조변수.static 자원(variable v = new variable() … v.cv)
4. 생성시점: 프로그램 실행 (class loader에 의해클래스 정보를 읽어서 class area, static area에 올리고 나서 이 때 클래스 static 자원을 가지고 있다면 static 자원도 같이 memory 올림
static 객체생성 이전에 메모리에 memory에 올라가는 방법 static area에는 Garbage collector가 존재하지 않음.
local variable
특징: 지역변수는 사용하기 전 반드시 초기화
생성시점: 함수가 호출되면 만들어지고 함수가 끝나면 소멸(stack)영역에 올라가는 자원
객체 지향 언어 특징
상속, 캡슐화, 다형성
1. 캡슐화 (은닉화) -> private
2. 다형성
overloading
[method overloading]
하나의 이름으로 여러가지 기능을 하는 함수
사용: println() 대표적인 함수
특징: 오버로딩은 성능 향상에 도움을 준다 (x) -> 상관없다
why) 개발자가 편하게 사용하려고
설계시 어떤 점을 생각하면: 함수의 활용이 많은 경우 (parameter 변경)
ex)System.out.println() : static이면서 overloading
문법: 함수의 이름은 같고 parameter의 개수와 타입을 달리하는 방법
1. 함수의 이름은 같아야 한다
2. [parameter] 개수 또는 [type]은 달라야 한다
3. return type은 overloading 판단 기준 (x)
4. parameter 순서가 다름을 인정한다
constructor
[constructor]
1.함수 ("특수한 목적"을 가지는 함수)
2.특수한 목적 (member field 초기화)
3.일반함수와 다른점
3.1 함수의 이름이 고정 (class 이름과 동일)
3.2 return type(x), void(x) >> 사실은 모든 생성자 함수 (void)
3.3 why void (default): 실행시점: 객체생성과 동시에 호출되는 함수: 생성된 값을 받을 녀석이 없어요
3.4 일반함수 (이름을 호출: print();), 생성자 함수는 new를 통해서 class가 객체로 만들어 질 때
4.목적: 생성되는 객체마다 다른 초기값을 부여할 때
5.함수는 overloading이 가능하다 (생성자 함수도 overloading 사용)
아주 중요한 개발자의 의도
예외적으로 overloading된 생성자 함수가 하나라도 존재한다면
컴파일러는 자동으로 default 생성자 함수를 만들지 않는다.
만약 default 생성자 함수를 사용하고 싶다면 강제 구현 하세요
개발자 의도: [강제적인 초기화] 의도
this
[this]
1. 객체 자신을 가리키는 this (앞으로 생성될 객체의 주소를 담을 곳이라고 가정하고)
2. this 객체 자신 (생성자를 호출하는): 원칙: 객체 생성시 생성자 1개 호출
예외적으로 this를 사용: 여러개의 생성자를 호출 가능
2. this (생성자를 호출하는 this)
원칙: 생성자는 객체 생성시 한개만 호출 가능
this 사용: 여러개의 생성자 함수를 호출 가능
this (생성자를 호출하는 this)
반복적으로 사용되는 코드