본문 바로가기

Study/Java Study

7장. 클래스와 객체

 

학교에서 듣는 수업 이름이 < 객체지향프로그래밍 >인데,

지금까지 이름에 의문을 가지고 있었다. 이번 정리로 객체 지향이 무엇인지에 대한 의문을 풀어보자

 

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);
  }
}

실행 클래스에서 멤버 변수에 접근하려면 우선 객체를 만들고,

객체명.멤버변수명;

으로 접근할 수 있다. 

 

㉯ 멤버 메서드 

 

  1. 정적 메서드 : static 키워드를 선언하는 메서드                                                                                           객체를 생성하지 않고 바로 사용
  2. 인스턴스 메서드 : 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