객체
정의
- 주체가 아닌 것, 주체가 활용하는 것
- 우리 주변에 있는 모든 것 - 프로그래밍의 대상
특징
객체지향 프로그래밍
정의
- 주변의 많은 것들을 객체화해서 프로그래밍 하는 것
장점
- 블록 형태의 모듈화된 프로그래밍
- 신뢰성 높은 프로그래밍이 가능하다.
- 추가/수정/삭제가 용이하다.
- 재사용성이 높다.
현실의 객체 / 프로그램의 객체의 관계
- 현실의 객체
- 현실의 객체가 갖는 속성과 기능은 추상화(abstraction)되어 클래스에 정의됨
- 클래스는 구체화되어 프로그램의 객체(instance, object)가 됨
- 프로그램의 클래스와 객체
- 클래스
- 객체를 정의해 놓은 것 (객체의 설계도)
- 클래스는 직접 사용할 수 없고, 직접 사용되는 객체를 만들기 위한 틀을 제공할 뿐
- 객체
클래스
클래스의 일반적인 구조
class Example {
//필드(멤버변수) 선언
int i1; //인스턴스 멤버 변수
static int i2; //클래스 멤버 변수 => 클래스 명으로 접근
//생성자 정의
//메서드 정의
void ex1(int param) {
}
static void ex2() { //클래스 메서드
}
}
- 예제
// Person.java
package com.ssafy.person;
public class Person {
// 속성
String name;
int age;
boolean isHungry;
// 동작
void work() {
isHungry = true;
}
void eat() {
isHungry = false;
}
}
// PersonTest.java
package com.ssafy.person;
public class PersonTest {
public static void main(String[] args) {
// 객체 사용
Person p1 = new Person();
Person p2 = new Person();
p1.name = "홍길동";
p1.isHungry = true;
p1.eat();
System.out.println(p1.name + " : " + p1.isHungry + " : " + p1.age);
p2.name = "장길산";
p2.work();
System.out.println(p2.name + " : " + p2.isHungry + " : " + p2.age);
}
}
생성자 (Constructor)
- 정의
- 새로운 객체를 생성하기 위해서 초기화 해주는 메소드
- 특징
- 생성자의 이름은 반드시 클래스명과 일치
- 리턴자료형을 명시하지 않음
- 객체 생성시 자동으로 호출
- 클래스 내 생성자가 하나도 없다면 자바 컴파일러가 컴파일시 자동으로 추가
- 생성자 예시
class Example {
int i;
Ex ex;
Example() { // 기본 생성자
int i; // 멤버 필드에 대한 초기화 작업
ex = new Ex();
}
Example(String str) { // 오버로딩 생성자
}
}
this 연산자
- 정의
- 특징
- 현재 클래스를 가르키는 레퍼런스 변수 (참조변수)
- 메소드 내에서 사용
- 객체 생성자 내에서 다른 생성자를 호출 시 사용
- 매개변수와 멤버변수를 구분하기 위해 멤버변수 앞에 this.를 붙여서 사용
- 예시
- this.필드명;
- this.메서드명();
- this(); //생성자 호출
접근지정(제한)자 (Access Control)
- 종류
- public
- protected
- 서로 같은 패키지에서 접근 가능
- 상속관계를 갖는다면 다른 패키지라도 자식이 부모를 참조
- default (생략)
- private
- 상속 관계에서의 접근지정자
- 자식클래스의 오버라이딩에서 접근제한자는 부모와 같거나 확장이어야 함
- 예시
- field
- Method
- Class
- [접근지정자 (public/default)] class 클래스명 { }