Development Project

Chapter04 클래스와 객체 본문

Language/Java

Chapter04 클래스와 객체

나를 위한 시간 2021. 12. 22. 18:58
  1. 객체 지향과 자바
    1. 객체 (Object, Instance)
      • 개념  
        - 현실 세계의 사물이나 개념을 시스템에서 이용하기 위해 현실 세계를 자연스럽게 표현하여 손쉽게 이용할 수 있도록 만든 소프트웨어 모델
        - 클래스의 모양 그대로 찍어낸 것으로, 프로그램 실행중에 생성되어 메모리 공간을 갖는 구체적인 실체
        - 객체 = 속성(attributes, properties) + 행동(messages, behaviors)
        • 속성
          - 객체의 특성을 표현하는 정적인 성질
          - 프로그래밍에서 속성은 필드라 함

        • 행동 (메소드 method)
          - 객체 내부의 일을 처리
          - 객체들간의 서로 영향을 주고 받는 동적인 일을 처리하는 단위
      • 객체 생성 (new 키워드)
        Circle pizza = new Circle();​
    2. 객체 지향의 특성
      • 상속
        • 개념
          - 상위 개체의 속성이 하위 개체에 물려짐
          - 하위 객체가 상위 개체의 속성을 모두 가지는 관계
          => 자식클래스가 부모클래스의 속성을 물려받고, 기능 확장
          • 부모클래스(수퍼클래스)
          • 하위클래스(서브클래스) : 부모클래스를 재사용하고 새로운 특성 추가
        • 장점
          - 공통 특성을 하위 클래스마다 반복적으로 기술하지 않고 한번만하므로 중복을 줄여 재사용의 효과↑
      • 다형성
        • 개념
          - 같은 이름의 메소드가 클래스나 객체에 따라 다르게 행동하도록 구현
          - 외부에 보이는 모습은 한가지 형태이지만, 실질적으로 쓰이는 기능은 여러역할을 수행한다는 의미

        • 종류
          - 메소드 오버로딩 : 같은 이름이지만 다르게 작동하는 여러 메소드
          - 메소드 오버라이딩 : 슈퍼클래스의 메소드를 서브 클래스마다 다르게 구현

  2. 자바 클래스 만들기
    • 개념
      - 객체를 만들어내기 위한 설계도 혹은 틀
      - 객체의 속성(state)과 행동(behavior) 포함
    • 클래스 구성
      • 클래스 선언
        접근권한 class 클래스이름{ }​
      • 필드와 메소드
        - 필드 : 객체 내에 값을 저장하는 멤버 변수
        - 메소드 : 함수이며 객체의 행동을 구현

      • 필드의 접근 지정자
      • 생성자
  3. 생성자
    • 개요
      - 클래스의 이름과 동일한 특별한 메소드
      - 객체 필드에 초기값을 저장하거나 객체의 사용을 위해 필요한 초기화를 위해 실행되는 메소드

    • 특징
      - 이름은 반드시 클래스 이름과 동일하게
      - 생성자 여러개 작성 가능 (오버로딩)
      - 생성자는 리턴타입을 지정할 수 없음
      - 생성자는 객체가 생성될 때 반드시 호출됨

    • 기본생성자 (default constructor)
      - 매개변수가 없고 아무작업 없이 단순 리턴하는 생성자
      - 클래스에 생성자가 하나도 선언되지 않은경우, 컴파일러에 의해 자동으로 삽입

    • this VS this()
      • this [ 인스턴스 자신을 가르키는 참조 변수 ]
        • 사용
          - this.멤버 형태로 멤버 사용
          - 객체의 멤버 변수와 메소드 변수의 이름이 같은경우
          - 다른 메소드 호출 시 객체 자신의 레퍼런스를 전달할 때
          - 메소드가 객체 자신의 레퍼런스를 반환할때
        • 사용예시
      • this() [ 생성자 ]
        • 사용
          - 같은 클래스의 다른 생성자를 호출할 때
          - 생성자 내에서만 사용 가능
        • 사용 예시
  4. 객체 배열
    • 객체 배열 선언과 생성 과정
      Circle[] c = new Circle[5];	// Circle 배열에 대한 레퍼런스 변수 C 선언 및 레퍼런스 배열 생성
      
      for(int i=0; i<c.length; i++){
      	c[i] = new Circle(i);	// 배열의 각 원소 객체 생성
      }
      
      for(int i=0; i<c.length; i++){
      	System.out.print((int)(c[i].getArea())+" ");	// 배열의 원소 객체 사용
      }
  5. 메소드 활용
    • 메소드
      - 클래스의 멤버 함수
      - 자바의 모든 메소드는 반드시 클래스 안에 있어야 함 (캡슐화의 원칙)

    • 메소드 구성형식
      접근지정자 리턴타입 메소드이름(메소드인자들){
      	//메소드 코드
      }​
    • 메소드 지정자 or 수정자
      특성종류 키워드 의미
      메소드 재정의 제한 final 하위 클래스에서 메소드를 더 이상 재정의할 수 없도록 한정
      접근 지정자 public protected private 메소드의 참조권한의 종류를 지정
      정적 static 메소드의 소속을 클래스로 한정
      추상 abstract 구현이 없는 추상 메소드 지정
      동기 synchronized 다중 스레드에서 메소드 동기화 지정
    • 자바의 인자 전달 방식
      1. 기본 타입의 값이 전달되는 경우
        - 매개변수가 byte, int, double 등 기본 타입의 값일 때, 건네는 값이 매개변수에 복사되어 전달


      2. 객체가 전달되는 경우
        - 객체의 참조값만 전달되어, 매개변수가 실인자 객체를 공유함


      3. 배열이 전달되는 경우
        - 배열전체가 전달되는 것이 아닌, 객체의 참조값만 전달되어, 매개변수가 실인자 객체를 공유함
    • 메소드 오버로딩(Overloading)
      - 메소드 이름은 같지만 매개변수의 개수나 타입이 서로 다른 메소드 
      - 리턴 타입은 오버로딩과 관련 없음
  6. 객체의 소멸과 가비지 컬렉션
    • 객체 소멸
      - new에 의해 할당된 객체 메모리를 자바가상머신의 가용 메모리로 되돌려주는 행위
      - 객체 소멸은 JVM의 고유한 역할임
       
    • 가비지 컬렉션
      - 자바에서 *가비지를 자동 회수하여 가용 메모리로 반환하는 과정
      System.gc();	// 가비지 컬렉션 자동 요청

      * 가비지 : 레퍼런스가 하나도 없는 객체로 누구도 사용할 수 없게 된 메모리

    • 패키지
      - 관련 있는 클래스 파일(컴파일된 .class)을 저장하는 디렉터리
      - 자바 응용 프로그램을 하나 이상의 패키지로 구성
  7. 접근 지정자
    • 목적
      - 객체 지향 언어의 캡슐화 정책은 멤버를 보호하는 것 
      - 클래스나 일부 멤버를 공개하여 다른 클래스에서 접근하도록 허용

    • 종류
      - private, protected, public, 디폴트(접근지정자 생략)
      공개적 순위 키워드 클래스
      내부
      동일 패키지 다른 패키지
      하위 클래스 일반클래스 하위 클래스 일반클래스
      1 public O O O O O
      2 protected O O O O X
      3 default O O O X X
      4 private O X X X X
  8. static 멤버  < 후에 개념 좀 더 추가예정 >
      non-static 멤버 static 멤버
    선언 class Sample {
       int n;
       void g() { ... }
    }
    class Sample {
       static int n;
       static void g() { ... }
    }
    공간적 특성 멤버는 객체마다 별도 존재
    - 인스턴스 멤버라고 부름
    멤버는 클래스당 하나 생성
    - 멤버는 객체 내부가 아닌 별도의 공간(클래스 코드가 적재되는 메모리)에 생성
    - 클래스 멤버라고 부름
    시간적 특성 객체 생성 시에 멤버 생성됨
    - 객체가 생길 때 멤버도 생성
    - 객체 생성 후 멤버 사용 가능
    - 객체가 사라지면 멤버도 사라짐
    클래스 로딩 시 에 멤버 생성
    - 객체가 생기기 전에 이미 생성
    - 객체가 생기기 전에도 사용 가능
    - 객체가 사라져도 멤버는 사라지지 않음
    - 멤버는 프로그램이 종료될 때 사라짐
    공유의 특성 공유되지 않음
    - 멤버는 객체 내에 각각 공간 유지
    동일한 클래스의 모든 객체들에 의해 공유됨
  9. final
    • final 필드
      - 상수를 선언할 때 사용
      - 선언 시에 초기값을 지정해야하며, 실행 중에 값을 변경할 수 없음
      class SharedClass {
      	public static final double PI = 3.14;
      }​
    • final 메소드
      - 오버라이딩 불가
      final class FinalClass {
      	...
      }
      
      class SubClass extends FinalClass {	// 컴파일 오류, 오버라이딩 할 수 없음
      	...
      }​
    • final 클래스
      - 클래스 상속 불가
      public class SuperClass {
      	protected final int finalMethod() { ... }
      }
      
      class SubClass extends SuperClass {
      	protected int finalMethod() { ... }	// 컴파일 오류, 오버라이딩 할 수 없음
      }​
Comments