개발자 쿠키

명품 JAVA Programming Chap04 클래스와 객체 본문

java

명품 JAVA Programming Chap04 클래스와 객체

개발자 쿠키 2022. 8. 3. 23:59

Chap04 클래스와 객체

  1. 객체 지향과 자바
  2. 자바 클래스 만들기
  3. 생성자
  4. 객체 배열
  5. 메소드 활용
  6. 객체의 소멸과 가비지 컬렉션
  7. 접근 지정자
  8. static 멤버
  9. final
  10. 요약

Chap04-1 객체 지향과 자바

  • 캡슐화 : 객체를 캡슐로 싸서 내부를 보호하고 볼 수 없게 하는 것으로 객체의 본질적인 특징
  • 상속 : 상위 객체의 속성이 하위 객체에 물려져서, 하위 개체가 상위 개체의 속성을 모두 가지는 관계
    • 부모 클래스 : 슈퍼 클래스
    • 자식 클래스 : 서브 클래스
  • 다형성 : 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현되는 것
    • 오버라이딩 : 부모 클래스에 구현된 메소드를, 자식 클래스에서 동일한 이름으로 자신의 특징에 맞게 다시 구현하                       는 메소드
    • 오버로딩 : 이름이 같지만 다르게 동작하는 메소드를 여러 개 만드는 메소드

Chap04-2 자바 클래스 만들기

  1. 클래스 : 객체를 만들어 내기 위한 설계도 혹은 틀
  2. 객체 : 클래스 모양 그대로 생성된 실체, 객체를 클래스의 인스턴스라고도 부른다.
  3. 클래스 구성
 public class Circle {
       public int radius;                 // 원의 반지름 필드                 
       public String name;            // 원의 이름 필드                        # 필드(변수)
       
       public Circle() {                   // 원의 생성자 메소드
       }
       public double getArea() {    // 원의 면적 계산 메소드           # 메소드
             return 3.14 * radius * radius;
       }
}
  1. 클래스 선언, class Circle
  2. 필드와 메소드
    1. 필드 : 객체 내에 값을 저장할 멤버 변수
    2. 메소드 : 함수, 객체의 행동을 구현한다.
  3. 접근 지정자, public
  4. 생성자(constructor) : 클래스의 이름과 동일한 메소드
public static void main (String args[]) {
      Circle pizza;                              // Circle 객체에 대한 레퍼런스 변수 pizza 선언
      pizza = new Circle();                 // Circle 객체 생성
     
      pizza.radius = 10;                      // radius 필드에 10 저장
      pizza.name = "자바피자";          // name 필드에 "자바피자" 저장
      double area = pizza.getArea();  // pizza 객체의 면적 알아내기
}
  • 레퍼런스 변수 선언
Circle pizza; // 레퍼런스 변수 pizza 선언
  • 객체 생성
pizza = new Circle();
  • 변수 선언과 객체 생성 (동시에)
Circle pizza = new Circle();

객체 멤버 접근 : 레퍼런스 변수 뒤에 점(.) 연산자를 붙인다.

pizza.radius = 10;

Chap04-3 생성자

  • 생성자 : 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드이다.
  • 생성자의 이름은 클래스 이름과 동일하다
  • 생성자는 여러 개 작성(오버로딩)할 수 있다
  • 생성자 new를 통해 객체를 생성할 때 한 번만 호출된다
  • 생성자에 리턴 타입을 지정할 수 없다
  • 생성자의 목적은 객체가 생성될 때, 필요한 초기 작업을 위함이다
Circle pizza = new Circe(10, "자바피자");                    // 생성자 Circle(int r, String n) 호출
  • 기본 생성자 : 매개변수와 실행 코드가 없어 아무 일도 하지 않고 단순 리턴하는 생성자이다. 디폴트 생성자라고도 부                        른다.
class Circle {
      public Circle() { }
}
  • this 레퍼런스 : 객체 자신에 대한 레퍼런스이다.
  • this의 필요성
    • this() : 클래스 내에서 생성자가 다른 생성자를 호출할 때 사용하는 자바코드 이다.
  • this() 사용시 주의할 점
    • this()는 반드시 생성자 코드에서만 호출할 수 있다.
    • this()는 반드시 같은 클래스 내 다른 생성자를 호출할 때 사용된다. 
    • this()는 반드시 생성자의 첫 번째 문장이 되어야 한다.

Chap04-4 객체 배열

  • 객체 배열 : 객체에 대한 레퍼런스를 원소로 갖는 배열이다.

Chap04-5  메소드 활용

  • 메소드 : 클래스의 멤버함수
  • 접근지정자
    • 4가지유형 : public, private, protected, 디폴트
  • 인자 전달 : 값에 의한 호출
  • 메소드 오버로딩 : 자바에서는 한 클래스 내에, 이름이 같지만 매개변수의 타입이나 개수가 서로 다른 여러 개의 메소                                드를 중복 작성할 수 있다.
    • 메소드 이름이 동일하여야 한다.
    • 매개변수의 개수나 타입이 서로 달라야 한다.

Chap04-6 객체의 소멸과 가지비 컬렉션

  • 객체의 소멸 : new에 의해 생성된 객체 공간을 자바 가상 기계에게 돌려주어 가용 메모리에 포함시키는 것이다.
  • 가비지 : 자바 응용프로그램에서 더 이상 사용되지 않게 된 객체나 배열 메모리이다.
  • 가비지 컬렉션 : 자바 플랫폼은 가용 메모리가 일정 크기 이하로 줄어들면 자동으로 가비지를 회수하여 가용 메모리를                            늘린다.
  • 가비지 컬렉션 강제 요청
System.gc();  // 가비지 컬렉션 강제 요청

Chap04-7 접근 지정자

  • 패키지 : 서로 관련 있는 클래스 파일들, 디렉터리 혹은 폴더와 같은 개념
  • 자바의 4가지 접근 지정자
    • private, protected, public, 접근 지정자 생략(디폴트 접근 지정)
  • 클래스 접근 지정
    • public 클래스
    • 디폴트 클래스(접근 지정자 생략) : 같은 패키지 내의 클래스에서만 사용이 허용된다.
    • 멤버 접근 지정
멤버에 접근하는 클래스 private 디폴트 접근 지정 protected public
같은 패키지의 클래스 x O O O
다른 패키지의 클래스 x x x O
접근 가능 영역 클래스 내 동일 패키지 내 동일 패키지와 자식클래스 모든 클래스
  • public 멤버 : 패키지를 막론하고 모든 클랜스 접근 가능하다.
  • private 멤버 : 비공개, 멤버는 클래스 내의 멤버들에게만 접근 허용된다.
  • protected 멤버 : 같은 패키지의 모든 클래스에 접근이 허용된다. 자식클래의 경우 접근이 허용된다.
  • default 멤버 : 접근 지정자가 생략된 멤버의 경우, 동일판 패키지 내에 있는 클래스들만 디폴트 멤버를 자유롭게 접근                        할 수 있다.

Chap04-8 static 멤버

  non - static 멤버 static 멤버
선언 class Sample {
   int n;
   void g() {...}
}
class Sample {
   static int m;
   static void g() {...}
}
공간적 특성 멤버는 객체마다 별도 존재 
  - 인스턴스 멤버라고 부름
멤버는 클래스당 하나 생성
  - 멤버는 객체 내부가 아닌 별도의 공간(클래스 코드         가 적재되는 메모리)에 생성
  - 클래스 멤버라고 부름
시간적 특성 객체 생성 시에 멤버 생성됨
 - 객체가 생길 때 멤버도 생성
 - 객체 생성 후 멤버 사용 가능
 - 객체가 사라지면 멤버도 사라짐
클래스 로딩 시에 멤버 생성
  - 객체가 생기기 전에 이미 생성
  - 객체가 생기기 전에도 사용 가능
  - 객체가 사라져도 멤버는 사라지지 않음
  - 멤버는 프로그램이 종료될 때 사라짐
공유의 특성 공유되지 않음
 - 멤버는 객체 내에 각각 공간 유지
동일한 클래스의 모든 객체들에 의해 공유됨
static 멤버는 클래스 이름으로 바로 접근한다.
  • static의 활용
    • 전역 변수 : 모든 클래스에서 공유
    • ex) java.lang.Math  // 객체를 생성하지 않고 바로 호출할 수 있는 static 타입의 멤버를 제공한다.
  • static 메소드는 static 멤버만 접근 할 수 있다.
  • static 메소드는 this를 사용할 수 없다

Chap04-9 final

  • final 클래스 : 클래스를 상속받을 수 없음을 지정한다.
  • fianl로 메소드를 선언하면 오버라이딩할 수 없는 메소드임을 선언한다.
  • fianl로 필드를 선언하면 필드는 상수가 된다.

Chap04-10 요약

  • 객체 지향 언어는 실세계를 모델링하여 객체, 객체 간의 관계, 객체 간의 상호 작용을 나타내는 언어로 캡슐화, 상속, 다형성의 특징을 갖는다.
  • 클래스는 객체를 생성하기 위한 설계도 또는 틀이며, 객체는 틀로써 직어낸 실체이다. 객체를 실체로 뜻하는 인스턴스라고 부른다.
  • 클래스는 객체들의 특성과 행동에 대한 절차나 방법을 구현하며, class 키워드를 사용하여 선언한다. 클래스는 필드와 메소드로 구성된다.
  • 자바에서는 반드시 new 키워드를 사용하여 객체를 생성한다.
  • 객체의 배열에서 배열의 원소는 객체가 아니며 객체에 대한 레퍼런스이다. 그러므로 객체 배열 생성 후 다시 원소의 개수만큼 객체를 생성해서 배열의 각 원소에 지정해야 한다.
  • 자바의 메소드 호출 시 기본 타입은 '값에 의한 호출'로 전달되고, 객체나 배열을 인자로 전달할 때는 객체나 배열의 레퍼런스만 전달된다.
  • 메소드는 오버로딩은 한 클래스 내에서 이름은 같지만 매개변수의 개수나 타입이 다른 여러 개의 메소드를 작성하는 것을 뜻한다.
  • this는 현재 객체를 가리키는 레퍼런스이다.
  • 생성자는 new를 통해 객체를 생성할 때 호출되며 주로 객체의 필드를 초기화한다.
  • this()는 생성자에서 다른 생성자를 호출하는 문장이며, 생성자의 첫 번째 코드로만 사용할 수 있다.
  • 더 이상 참조되지 않는 객체를 가비지라 하며, 가용 메모리가 일정 수준 이하로 줄어들면 가비지 컬렉션이 자동으로 실행된다.
  • 클래스 접근 지정자로는 public과 디폴트가 사용된다.
  • 멤버의 접근 지정자로 private, protected, 디폴트,public이 있다.
  • 객체를 생성하지 않고도 사용할 수 있는 필드, 메소드를 static 필드, static 메소드라고 하며 동일한 클래스의 객체들 사이에 공유된다.
  • 클래스의 static 멤버들은 클래스당 하나만 생성되며, 프로그램이 시작될 때 이미 생성되어 객체를 생성하지 않고도 사용할 수 있다.
  • final로 선언된 클래스는 상송되지 않으며, final 메소드는 더 이상 오버라이딩될 수 없고, final로 선언된 필드는 상수로서 초기화 이후 값을 수정할 수 없다.

명품 JAVA Programming - 황기태, 김효수 - 내용을 정리한 내용입니다.