- 캡슐화(Encapsulation) : 객체를 캡슐로 싸서 내부를 보호하고 볼 수 없게 하는 것 → 외부의 접근으로부터 안전,
클래스라는 캡슐을 사용하고 필드(멤버 변수)와 매서드(멤버 함수)로 구성
- 상속(Inheritance) : 상위 객체의 속성이 하위 개체에 물려져서, 하위 개체가 상위 개체의 속성을 모두 가지는 관계, 자바에서는 자식 클래스가 부모 클래스의 속성을 물려받고 기능을 확장(extens)하는 개념
- 다형성(Polymorphism) : 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현되는 것
- 매소드 오버라이딩(Overriding) : 슈퍼 클래스(부모 클래스)에 구현된 매소드를, 서브 클래스(자식 클래스)에서 동일한 이름으로 자신의 특징에 맞게 다시 구현하는 것
- 매소드 오버로딩(Overloading) : 클래스 내에서 이름이 같지만 서로 다르게 동작하는 매소드를 여러 개 만드는 매소드
클래스 구성
- class 키워드를 사용하여 선언
- 클래스 구성요소를 멤버라고 부르며, 멤버는 필드(멤버 변수)와 메소드(멤버 함수) 두 가지 종류가 있음
ex)
public class Circle { int radius; String name; } - class 키워드 사용하여 Circle 클래스 선언 - 중괄호 안에 필드와 메소드 모두 작성 - 클래스 외부에 어떤 필드나 메소드 위치 불가 - public : 접근지정자 - 생성자 : 클래스 이름과 동일한 메소
객체 생성과 객체 접근
Circle pizza; pizza = new Circle();
- new 연산자를 사용하여 객체 생성
- 객체의 멤버 접근할 때는 레퍼런스 변수 뒤에 .연산자를 붙임
생성자(constructor)
- 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드
- 생성자의 이름은 클래스 이름과 동일
- 생성자는 여러 개 작성(오버로딩) 가능
- 생성자는 new를 통해 객체를 생성할 때 한 번만 호출
- 생성자에 리턴 타입 불가
- 사용하는 목적은 객체가 생성될 때 필요한 초기 작업을 하기 위함
기본 생성자(default constructor)
- 매개변수와 실행 코드가 없어 아무 일도 하지 않는 단순 리턴하는 생성자 , 디폴트 생성자라고도 함
- 기본 생성자가 자동으로 생성되는 경우 → 컴파일러에서 자동으로 생성됨
- 기본 생성자가 자동으로 생성되지 않는 경우 → 매개변수를 가진 생성자가 작성되어 있기 때문에, 컴파일러는 기본 생성자를 만들어 주지 않음
this
- 현재 객체 자신에 대한 레퍼런스
- this 사용하는 이유는 매개변수의 이름은 그 자체로서 코드를 읽는 사람에게 그 용도를 나타내므로 적합한 이름을 붙이는 것이 중요
this()
- 클래스 내에서 생성자가 다른 생성자를 호출할 때 사용하는 자바 코드
- this() 사용 시 주의 사항
반드시 생성자 코드에서만 호출 가능
반드시 같은 클래스 내 다른 생성자를 호출할 때 사용
반드시 생성자의 첫 번째 문자가 되어야 함
객체 배열
- 객체에 대한 레퍼런스를 원소로 갖는 배열
메소드 활용
- 메소드 : 클래스의 멤버 함수
- call by value : 호출하는 실인자의 값이 복사되어 매소드의 매개변수에 전달됨
기본 타입의 값이 전달되는 경우 : 기본 타입(byte, char, short, int, long, float, double, boolean)으로 선언된 경우, 호출자가 건네는 값이 매개변수에 복사
객체가 전달되는 경우 : 매개변수가 클래스 타입인 경우, 객체가 아니라 객체의 레퍼런스 값이 전달
배열이 전달되는 경우 : 배열이 통째로 전달되는 것이 아닌 배열에 대한 레퍼런스만 전달 ※ 메소드의 매개변수로 객체나 배열을 전달할 때 레퍼런스만 전달하기 때문에 객체나 배열이 통째로 전달되지 않음 →메소드에서 전달받은 객체의 필드나 배열의 원소값을 변경할 수 있기 때문에 주의!
메소드 오버로딩
- 한 클래스 내에 이름이 같지만 매개변수의 타입이나 개수가 서로 다른 여러 개의 매소드를 중복 작성하는 것
- 메소드 오버로딩 조건
메소드 이름이 동일
매개변수의 개수나 타입이 서로 달라야 함
접근 지정자
- 패키지 : 디렉터리 혹은 폴더 같은 개념, 클래스 파일들을 여러 패키지에 분산하여 관리
- 접근 지정자 종류
멤버에 접근하는 클래스
멤버의 접근지정자
private
default
protected
public
같은 패키지의 클래스
X
O
O
O
다른 패키지의 클래스
X
X
X
O
접근 가능 영역
클래스 내
동일 패키지 내
동일 패키지와 자식 클래스
모든 클래스
static 멤버
- 클래스 하나당 하나만 생성되는 멤버로서 동일한 클래스의 모든 객체들이 공유
- non-static멤버 vs static 멤버
non - static 멤버
static 멤버
선언
class Sample{ int n; void g() {...} }
class Sample{ static int m; static void g() {...} }