
객체 어려운 개념이 아니다. 우리 주변에 있는 모든 것 들이 객체임.
TV, 컴퓨터 , 책 집, 의자 등등 실세계는 객체들의 집합이며, 실세계의 객체들은 자신만의 고유한 특성과 행동을 가진다고 함.
클래스와 객체 개념을 도입하였음. 객체 지향 언어는 다음과 같은 특성을 가짐.
👉 캡슐화
- 캡슐화는 객체를 캡슐로 싸서 그 배누를 보호가 볼 수 없게 하는 것으로 객체의 가장 본질적인 특징임.
- 자바에서는 클래스 객체의 모양을 선언한 틀이며, 클래스 모양 그대로 생성된 실체가 객체임
- 자바는 필드와 메소드를 클래느 내에 모두 구현하며 캡슐화를 통해 객체 내 필드에 대한 외부로부터 접근을 제어함.
👉 상속
- 상속은 상위 개체의 속성이 하위 개체에 물려져서, 하위 개체가 상위 개체의 속성을 모두 가지는 관계
- 자식 클래스가 부모 클래스를 속성을 물려받아 부모 클래스 기능을 확장(extends)하는 개념임.
- 부모 클래스를 슈퍼 클래스 자식 클래스를 서브 클래스라고 부름.
👉 다형성
- 다형성은 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 구현 되는 것을 말함.
- 슈퍼클래스에 구현된 메소드를, 서브 클래스에서 자신의 특징에 맞게 동일한 이름으로 다시 구현하는 이른바 메소드 오버라이딩(overriding)이라고 부름.
- 다형성의 또 다른 사럐는 클래스 내에서 같은 이름을 메소드를 여러 개 만드는 메소드 오버로딩(overloading) 이 있음.
자바를 비롯한 객체 지향 언어에서는 클래스 객체를 만들어 내기 위한 설계 혹은 틀이며, 그 내에서 선언된 모양 그대로 생성된 실체가 객체이며 이러한 연유로 객체를 클래스의 인스턴스라고 부름.
public class Circle {
int radius;
String name;
public double getArea() {
return 3.14*radius*radius;
}
}
👉 클래스의 구성
클래스는 class 키워드와 클래스 이름으로 선언하고 중괄호{ } 안에 클래의 필드와 메소드 모두 작서애야 하며 클래스 외부에 필드, 메소드 결코 둘 수 없음.
👉 클래스 멤버
필드와 메소드로서, 필드는 객체의 상태 값을 저장할 멤버변수이며 메소드는 실행 가능한 함수이고 객체의 행위를 구현함.
👉 접근 지정자
public은 접근 지정자로 다른 클래스에서 이용이 가능하며 멤버를 public 선언시 호출 또는 접근할 수 있는 공개상태임.
객체에 대한 레퍼런스 변수 선언과 객체 생성의 두 가지 과정으로 구분
생성자는 객체가 생성될 때 초기화를 위해 실행되는 메소드
기본 생성자란 매개 변수가 없고 또한 실행 코드가 없이 아무일도 하지 않고 단순 리턴하는 생성자이며 디폴트 생성자라고 부름.
👉 기본 생성자가 자동으로 생성되는 경우
- 생성자가 없는 클래스는 있을 수 없으므로 생성자가 하나도 없는 경우 컴파일러는 기본 생성자를 자동으로 생성함.
👉기본 생성자가 자동으로 생성되지 않는 경우
- 생성자가 하나라도 존재하면 컴파일러가 기본 생성자를 임의로 삽입해 주지 않음.
this()는 클래스 내에서 생성자가 따른 생성자를 호출할 때 사용하는 자바 코드임.
객체배열은 객체에 대한 레퍼런스 원소로 갖는 배열임.
객체 배열을 만들기 위해서는 다음의 3단계가 필요함.
메소드를 여러 개 선언하는 메소드 오버로딩에 대해 설명함.
public int getSum(int i , int j) {
int sum;
sum = i + j;
return sum;
}
접근 지정을 선언한다는 점에서 C/C+함수의 작성법괴 같음.
👉 접근 지정자
- 자바에서는 메소드는 반드시 접근 지정자와 함께 선언되어야함.
- public , private, protected,가 있으며 접근 지정자가 생략된 디폴트 접근 지정의 경우 동일한 패키지 내의 모든 클래스 호출이 가능함.
👉 리턴 타입
- 리턴 타입은 메소드가 호출자에게 리턴할 값을 말함.
- 메소드가 아무 값도 없는 리턴하지 않는다면 void타입으로 선언함.
자바의 메소드 호출 시 인자 전달 방식은 값에 의한 호출을 말함.
👉 기본 타입의 값이 전달 되는 경우
- 매개변수가 기본타입(byte, int, char, double)으로 선언되는 경우, 호출자가 건네는 값이 메소드의 매개 변수에 복사되어 전달함.
👉 객체가 전달되는 경우
- 메소드가 매개변수가 클래스 타입인 경우, 객체가 아니라 객체의 레퍼런수 값이 전달됨.
👉 배열이 전달되는 경우
- 객체가 전달되는 경우와 동일하게, 배열이 통째로 전달되는 것이 아니라 배열에 대한 레퍼런스만 전달됨.
자바에서는 클래스 내에 이름이 같지만 매개 변수의 타입이나 개수가 서로 다른 여러개의 메소드를 작성할 수 있음. 이것을 메소드 오버로딩이라고 함. 혹은 메소드 중복이라고 부름.
오버로딩이 성립되려면 2가지 조건을 만족해야함
(1) 메소드 이름이 동일하여야 한다.
(2) 메소드 매개 변수의 개수나 타입이 서로 달라야 한다.
👉 오버로딩 성공
- 매개 변수의 타입과 개수가 서로 달라 오버로딩이 성공함.
👉 오버로딩 실패
- 성공 여부는 자바 컴파일러에 의해 판단되며 실패하면 컴파일 오류가 생김.
객체의 치환은 객체를 복사하는 것아 아니라는 점을 주의해야 함!
객체를 소멸 시키는 연산자는 없다 그러므로 개발자가 마음대로 객체를 소멸이 불가능함.
system 또는 Runtime 객체의 gc() 메소드를 호출하여, 자바 플랫폼에 가비지 컬렉션을 요청가능함.
System.gc(); // 가비지 컬렉션 작동 요청
대부분 객체 지향 언어에는 접근 지정자를 두고 있음.
👉 public 클래스
- 패키지 상관 없이 다른 어떤 클래스에게도 사용이 허용된다는 점.
👉 디폴트 클래스(접근 지정자 생략)
- 접근 지정자 없이 클래스를 선언한 경우 디폴트 접근 지정으로 선언 되었다고 함.
- 디폴트로 선언된 클래스는 오직 같은 패키지 내에 있는 클래스들만 사용이 허용됨.
4가지가 있으며 private < 디폴트 < protected < public 순으로 넓어짐.
👉 public 멤버
- 패키지를 막론하고 모든 클래스들이 접근이 가능
👉 private 멤버
- 접근 지정자를 비공개 한다는 의로 클래스 내의 멤버들에게만 접근이 허용됨.
👉 protected 멤버
- 보호된 공개를 의미함 두 가지 클래스 내에서만 공개함.
(1) 같은 패키지 내의 모든 클래스 접근이 가능
(2) 다른 패키지에 있더라도 자식 클래스 인 경우 접근이 허용함 protected는 상속과 관련이 있기 때문임.👉 디폴트 멤버
- 접근 지정자가 생략된 멤버를 경우를 말하며 동일한 패키지 내에 있는 클래스들만 자유롭게 접근이 가능함.
클래스의 멤버들 중 static 지시어로 선언된 멤버를 static멤버라고 함.
static 멤버는 객체의 이름이나 클래스 이름으로 모두 활용이 가능함.
staticSample.m = 3; // 클래스 이름으로 static 필드 접근
staticSqmple.f(); // 클래스 이름으로 static 메소드 호출
👉 전역 변수와 전역 함수를 만들 때 활용
- 모든 클래스에서 공유하는 전역 변수나 모든 클래스에서 호출할 수 있는 전역 함수를 만들고자 할 때 static을 선언하면 됨.
👉 공유 멤버를 만들고자 할 때 활용
- static으로 선언된 필드나 메소드는 클래스 객체들 사이에서 공유됨.
두가지 제약 사항을 가짐