☕ JAVA

[Java] 클래스, 객체

별이⭐ 2024. 5. 2. 17:48

클래스와 객체

  • 클래스
    • 정의: 객체를 정의해 놓은 것. (설계도)
    • 용도: 객체를 생성하는데 사용
  • 객체
    • 정의: 실제로 존재하는 것. 사물 또는 개념. (제품)
    • 용도: 객체가 가지고 있는 기능과 속성에 따라 다름
    • 구성 요소 = 속성(변수) + 기능(메서드)
      • ex) 속성 = 크기, 색상 / 기능 = 켜기, 끄기
  • 객체와 인스턴스
    • 객체: 모든 인스턴스를 대표하는 일반적 용어
    • 인스턴스: 특정 클래스로부터 생성된 객체 ex) TV 인스턴스
  • 클래스 작성(설계도) → 객체 생성(제품 생성) → 객체 사용(제품 사용)

 

 

객체

  • 객체의 생성
  • 객체의 사용
    • 객체의 사용 = 변수, 메서드 사용

 

 

  • 객체의 멤버
    • 객체의 멤버 = 변수 + 메서드

 

  • 만약 Tv의 인스턴스 t1과 t2를 만들고 t2 = t1을 한다면?
    • 더 이상 참조변수가 0x200에 존재하지 않아서 0x200은 사용 불가 객체가 된다. 사용할 수 없는 메모리는 GC가 주기적으로 제거한다.

 

  • 하나의 인스턴스를 여러 개의 참조변수가 가리키는 것 -> 가능
  • 여러 인스턴스를 하나의 참조변수가 가리키는 것 -> 불가능!
  • 객체지향의 핵심은 “메시징”
    • 의도는 “메시징”이다. 훌륭하고 성장 가능한 시스템을 만들기 위한 핵심 모듈 내부의 속성과 행동이 어떤가보다 모듈이 어떻게 커뮤니케이션 하는가에 달려있다. -Alan Curtis Kay
  • 객체는 자율적인 책임을 가진다.
    • 자율적인 객체란 스스로 정한 원칙에 따라 판단하고 스스로의 의지를 기반으로 행동하는 객체다. 객체가 어떤 행동을 하는 유일한 이유는 다른 객체로부터 요청을 수신했기 때문이다. 요청을 처리하기 위해 객체가 수행하는 행동을 책임이라고 한다.
    • 자율적인 책임의 특징은 객체가 어떻게 해야하는가가 아니라 무엇을 해야하는가를 설명한다는 것이다. - 객체지향의 사실과 오해

 

클래스

  • 클래스의 정의
    • 1) 설계도 2) 데이터+함수 3) 사용자 정의 타입
    • 데이터+함수?
      • 변수: 하나의 데이터를 저장할 수 있는 공간
      • 배열: 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
      • 구조체: 서로 관련된 여러 데이터(종류에 관계 X)를 하나로 저장할 수 있는 공간
      • 클래스: 데이터와 함수의 결합 (구조체 + 함수)
    • 사용자 정의 타입?
      • 원하는 타입(클래스)을 직접 만들 수 있다.
      • 객체지향적 코드 -> 유지보수 좋아짐

 

  • 클래스 선언 방법
    1. 첫 문자나 문자가 ‘_’, ‘$’의 특수 문자로 시작되어야 한다. 숫자로 시작할 수 없다.
    2. 첫 문자가 아니라면, 문자나 ‘_’, ‘$’의 특수문자 그리고 숫자로 구성될 수 있다.
    3. 자바의 예약어는 식별자로 사용할 수 없다.
    4. 자바의 식별자는 대소문자를 구분한다.
    5. 식별자의 길이는 제한이 없고 공백은 포함할 수 없다.
    • 관례
      1. 클래스명은 대문자로 시작한다.
      2. 카멜 표기법을 사용한다.
  • 한 파일에 여러 클래스 작성하기
    1. public class가 있는 경우 소스 파일의 이름은 반드시 public class의 이름과 일치 (대소문자도 일치)
    2. public class가 없는 경우는 상관 없이 사용 가능