학교에서 듣는 수업 이름이 < 객체지향프로그래밍 >인데,
지금까지 이름에 의문을 가지고 있었다. 이번 정리로 객체 지향이 무엇인지에 대한 의문을 풀어보자
1. 객체지향 프로그래밍
: 객체를 조립하여 프로그램을 만드는 것
객체지향 = 모듈화 = 비슷한 기능이나 동작을 하나의 메소드나 클래스로 정의
자바에서 말하는 객체는 메소드나 클래스로 말할 수 있는데, 그냥 비슷한거 묶음 이라고 생각하면 된다.
즉, 객체 = 서로 연관된 변수와 함수를 그룹핑하고 거기에 이름을 붙인것!
2. 클래스와 객체
클래스, 객체, 인스턴스의 헷갈리는 개념을 정리해보자.
클래스(Class) :
- 연관되어 있는 변수와 메서드의 집합
- 객체가 어떤 속성(상태)이 있고 기능(행동)을 하는지를 설명하는 설계도
[접근제한자] class 클래스명 {
(멤버) 변수 --> 속성
(멤버) 메소드 --> 행동
}
객체(Object) :
- 소프트웨어 세계에 구현할 대상
- 클래스에 선언된 모양 그대로 생성된 실체
- ‘클래스의 인스턴스(instance)’ 라고도 부른다.
- 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다.
클래스명 객체명 = new 클래스명();
Cat catObj = new Cat();
인스턴스(Instance) :
- 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체
--> 즉, 객체를 소프트웨어에 실체화 하면 그것을 ‘인스턴스’라고 부른다.
- 인스턴스는 객체에 포함된다고 볼 수 있다.
- 인스턴스라는 용어는 반드시 클래스와 객체 사이의 관계로 한정지어서 사용할 필요는 없다.
인스턴스는 어떤 원본(추상적인 개념)으로부터 ‘생성된 복제본’을 의미한다.
클래스, 객체, 인스턴스의 차이 정리
☆ 클래스(Class) VS 객체(Object)
--> 클래스는 ‘설계도’, 객체는 ‘설계도로 구현한 모든 대상’을 의미한다.
☆ 객체(Object) VS 인스턴스(Instance)--> 클래스의 타입으로 선언되었을 때 객체라고 부르고, 그 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부른다. 객체를 ‘클래스의 인스턴스’라고도 부른다.
--> ‘방금 인스턴스화하여 레퍼런스를 할당한’ 객체를 인스턴스라고 말하지만, 이는 원본(추상적인 개념)으로부터 생성되었다는 것에 의미를 부여하는 것일 뿐 엄격하게 객체와 인스턴스를 나누긴 어렵다.
3. 클래스의 구성 요소
- 멤버 변수 : 객체의 데이터가 저장되는 곳
- 멤버 메소드 : 객체의 동작, 데이터의 조작이 이루어지는 곳
- 생성자 : 객체를 생성할 때 초기화되는 항목 관리
㉮ 멤버 변수
public class Cat {
String breed;
String color;
int age = 10;
}
여기서 breed, color, age가 멤버 변수가 되고
public class Example01 {
public static void main(String[] args) {
Cat catObj = new Cat();
catObj.breed = "페르시안 고양이";
catObj.color = "흰색";
System.out.println("품종 : " + catObj.breed);
System.out.println("색상 : " + catObj.color);
}
}
실행 클래스에서 멤버 변수에 접근하려면 우선 객체를 만들고,
객체명.멤버변수명;
으로 접근할 수 있다.
㉯ 멤버 메서드
- 정적 메서드 : static 키워드를 선언하는 메서드 객체를 생성하지 않고 바로 사용
- 인스턴스 메서드 : static 키워드를 선언하지 않는 메서드 객체를 생성해야만 사용 가능
public class Example02 {
static void myMethod1() {
System.out.println("정적 메서드 호출");
}
public void myMethod2() {
System.out.println("인스턴스 메서드 호출");
}
public static void main(String[] args) {
myMethod1();
Example02 myObj = new Example02();
myObj.myMethod2();
멤버 변수와 마찬가지로 우선 객체를 만들고
객체명.멤버메서드명();
으로 접근할 수 있다.
4. 생성자
: 객체를 생성할 때 new 연산자로 호출되는 부분
생성자 작성 규칙
- 생성자명 = 해당 클래스명
- 생성자는 abstract, final, static 선언 불가능
- 다른 클래스가 생성자 호출 가능
- 반환 유형이 없음
- 기본 생성자 ( 매개 변수가 없음 )
- 클래스 내에 기본 생성자를 정의하지 않아도 자동으로 생성
- 일반 생성자 ( 매개 변수가 있음 )
- 기본 생성자와 달리 생략 불가능
- 클래스의 멤버 변수를 초기화하는 데 사용
※ 생성자 오버로딩
: 이름이 같지만 매개변수의 자료형이나 개수가 다른 여러 생성자
+ this를 이용한 생성자 체인
- this() 생성자는 동일한 클래스 내의 서로 다른 생성자에서 오버로딩된 또 다른 생성자 하나를 호출하는 데 사용
- 생성자는 다른 생성자에서만 호출 가능해서 생성자 체인이 필요한 것!!
생성자 체인 예시 >
public class MemberChain {
String firstName;
String country;
int age;
public MemberChain() {
this("홍길동");
}
public MemberChain(String mName) {
this(mName, 20);
}
public MemberChain(String mName, int mAge) {
this(mName, mAge, "대한민국");
}
public MemberChain(String mName, int mAge, String mCountry) {
firstName = mName;
age = mAge;
country = mCountry;
}
void printInfo() {
System.out.println("이름 : " + firstName);
System.out.println("국적 : " + country);
System.out.println("나이 : " + age);
}
}
실행 클래스 >
public class Constructor04 {
public static void main(String[] args) {
MemberChain object = new MemberChain();
object.printInfo();
}
}
실행 결과 >
이름 : 홍길동 국적 : 대한민국 나이 : 21 |
5. 접근제한자
: 접근성을 설정하는 데 사용되는 키워드
불필요한 세부 정보를 숨기고 최소한의 정보만으로 프로그램 손쉽게 사용할 수 있도록 하는 정보 은닉 캡슐화를 위해 필요
유형 | 같은 클래스의 멤버 | 같은 패키지의 멤버 | 자식 클래스의 멤버 | 기타 영역 |
public | O | O | O | O |
protected | O | O | O | X |
선언하지 않음 (default) | O | O | X | X |
private | O | X | X | X |
'Study > Java Study' 카테고리의 다른 글
9장. 추상 클래스와 인터페이스 (0) | 2023.05.22 |
---|---|
8장. 상속과 다형성 (1) | 2023.05.21 |
6장. 배열과 문자열 (0) | 2023.05.20 |
5장. 메서드 (1) | 2023.04.09 |
4장. 조건문과 반복문 (0) | 2023.04.09 |