객체지향이론의 기본 개념 : 실제 세계는 사물(객체)로 이루어져 있으며,발생하는 모든 사건들은 사물간의 상호작용이다.
<-> 절차적 언어 : FORTRAN, COBOL
재사용성, 유지보수, 중복 코드 제거
코드의 재사용성이 높다.
코드의 관리가 용이하다.
신뢰성이 높은 프로그래밍을 가능하게 한다.
데이터 보호(제어자와 메서드를 이용), 코드의 불일치로 인한 오동작 방지(코드의 중복 제거)
인스턴스화 : 클래스 -> 객체 만드는 과정
인스턴스 : 어떤 클래스로부터 만들어진 객체
클래스명 변수명; //클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명();
접근 : 참조변수
.멤버변수(메서드)
Tv[] tvArr = new Tv[3]; // 길이가 3인 Tv타입의 참조변수 배열
// 객체를 생성해서 배열의 각 요소에 저장
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
//Tv[] tvArr = { new Tv(), new TV (), new Tv() };
변수의 종류 | 선언위치 | 생성시기 | 기타 |
---|---|---|---|
클래스 변수 (Class variable) | 클래스 영역 | 클래스가 메모리에 올라갈 때 (인스턴스 생성전에도 접근 가능) | 선언 : 변수 앞에 static을 붙임 접근 : 클래스명(인스턴스명).변수명, 전역변수(public)의 성격 |
인스턴스 변수 (Instance variable) | 클래스 영역 | 인스턴스가 생성되었을 때 | |
지역변수 (local variable) | 클래스 영역 이외의 영역 (메서드, 생성자, 초기화 블럭 내부) | 변수 선언문이 수행되었을 때 |
응용프로그램 실행 -> JVM이 시스템으로부터 메모리 할당 받음 -> 메모리를 용도에 따라 여러 영역으로 나누어 관리 & 프로그램 수행
cf. 참조변수 선언 + 인스턴스 메서드 호출 한번에!
MemberCall c = new MemberCall();
int result = c.instanceMethodl();
⬇️
int result = new MemberCall().instanceMethodl();
= 메서드 오버로딩(method overloading)
한클래스 내에 같은이름의 메서드를 여러 개 정의하는 것
주의할 예시
long add(int a, long b) { return a+b; } // 오버로딩ㅇ
long add(long a, int b) { return a+b; } // 오버로딩ㅇ
기존에는 메서드의 매개변수 개수가 고정적이었으나 JDK1.5부터 동적으로 지정해 줄 수 있게 하는 기능
타입... 변수명
항상 마지막 매개변수이어야 함, 아예 생략 가능
내부적으로는 배열이 생성됨
ex) public PrintStream printf(String format, Object... args) { ... }
: 매개변수의 개수 1개
인스턴스가 생성될 때 호출되는 ‘인스턴스 초기화 메서드’
(연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것x)
등등
☑️ this : 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다. 모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재한다.
☑️ this(), this(매개변수) : 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.
ex)
class Car {
String color; // 색상
StringgearType; //변속기 종류 一auto(자동),manual(수동)
int door; // 문의 개수
Car() {
this("white", "auto", 4);
}
Car(String color) {
this(color, "auto", 4);
}
Car(String color, String gearType, int door) {
this.color = color;
this.gearType = gearType;
this.door = door;
}
}
cf. static메서드(클래스 메서드) 에서는 인스턴스 멤버들을 사용할 수 없는 것처럼, ‘this’ 역시 사용할 수 x
생성자보다 인스턴스 초기화 블력이 먼저 수행된다 (클래스 로드 -> 클래스 변수들이 자동으로 메모리에 만들어어짐 -> 초기화 블럭이 클래스 변수 초기화)
{ }
static{ }
ex)
class InitBlock {
static {
// 클래스 초기화 블럭
}
{
// 인스턴스 초기화 블럭
}
// ...
}
초기화 시점 | 초기화순서 | |
---|---|---|
클래스 변수 | 클래스가 처음 로딩될 때 단 한번 | 기본값 -> 명시적초기화 -> 클래스 초기화 블럭 |
인스턴스 변수 | 인스턴스가 생성될 때마다 각 인스턴스별로 초기화 | 기본값 -> 명시적초기화 -> 인스턴스 초기화 블럭 -> 생성자 |
cf. 클래스의 로딩 시기는 JVM의 종류에 따라 좀 다를 수 있음
클래스가 필요할 때 바로 메모리에 로딩하도록 설계 가 되어있는 것도 있고. 실행효율을 높이기 위해서 사용될 클래스들을 프로그램이 시작될 때 미리 로딩하도록 되어있는 것도 있다.
I love that you told me about this piece; I really enjoy reading it. I was really hoping to find that, and I really hope you keep posting such great information in the years to come. foodle