클래스와 객체

ChaeHo95·2022년 5월 22일
0

Java

목록 보기
2/10

객체(Object)

자신만의 고유한 특성(state)과 행동(behavior)을 가지며 다른 객체들과 상호 작용하면서 존재

객체 지향 언어의 특성

  • 캡슐화(Encapsulation) 객체를 캡슐로 싸서 내부를 보호하고 볼 수 없게 하는 것 객체의 본질적인 특징 자바에서는 객체는 캡슐화가 기본 원칙이지만 외부와의 접속을 위해 몇 부분만 공개 노출되며, 클래스(class)라는 캡슐을 사용하여 필드(멤버 변수)와 메소드(멤버 함수)로 구성
  • 상속(Inheritance) 상위 개체의 속성이 하위 개체에 물려져서, 하위 개체가 상위 개체의 속성을 모두 가지는 관계 자바의 상속은 자식 클래스가 부모 클래스의 속성을 물려받고 기능을 추가하여 확장(extends)하는 개념 자바에서는 부모 클래스를 슈퍼 클래스(super class)라고 부르며, 자식 클래스를 서브 클래스(sub class)라고 부름 상속은 슈퍼 클래스의 필드와 메소드를 물려받아 코드를 재사용함으로써, 코드 작성에 드는 시간과 비용을 주임
  • 다형성(Polymorphism) 같은 이름의 메소드가 클래스 혹은 객체 따라 다르게 동작하도록 구현되는 것 슈퍼 클래스에 규현된 메소드를 , 서브 클래스에서 동일한 이름으로 자신의 특징에 맞게 다시 구현 하는 것, 메소드 오버라이딩(overriding)이라고 불림 클래스 내에서 이름이 같지만 서로 다르게 동작하는 메소드를 여러 개 만드는 메소드 오버로딩(overloading)도 있음

객체 지향 언어의 목적

  • 소프트웨어의 생산성 향상 객체 지향 언어는 상속을 통해 이미 작성된 코드를 재사용하기 쉬우며, 부분 수정을 통해 소프트웨어를 다시 만드는 부담을 대폭 줄일 수 있어 소프트웨어의 생산성 향상
  • 실세계에 대한 쉬운 모델링 필요한 요소를 객체로 만들고, 객체 사이의 상호 작용을 표현하는 방법으로 효과적인 프로그래밍을 할 수 있음

클래스와 객체

클래스는 객체를 만들어 내기 위한 설계도 혹은 틀이며, 클래스 모양 그대로 생성된 실체가 객체

객체를 클래스의 인스터스(Instance)라고도 부름

생성자의 개념

객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드

생성자 선언

  • 생성자의 이름은 클래스 이름과 동일
  • 생성자는 여러 개 작성(오버로딩) 할 수 있음
  • 생성자는 new를 통해 객체를 생성하며, 한번만 호출 됨
  • 생성자에 리턴 타입을 지정 불가
  • 생성자의 목적은 객체가 생성될 때, 필요한 초기 작업을 위함

this 레퍼런스

this는 현재 실행되고 있는 메소드가 속한 객체 자신에 대한 레퍼런스

this()로 다른 생성자 호풀

this()는 클래스 내에서 생성자가 다른 생성자를 호출할 때 사용하는 자바 코드

메소드 오버로딩

한 클래스 내에, 이름이 같지만 매개변수의 타입이나 개수가 서로 다른 여러 개의 메소드를 중복 작성

  • 메소드 이름이 동일
  • 매개변수의 개수나 타입이 달라야 함

객체 소멸

new에 의해 생성된 객체 공간을 자바 가상 기계에게 돌려주어 가용 메모리(available memory)에 포함 시키는 것

자바에서는 가비지 컬렉터(garbage collector)가 있어 적절한 시점에 사용하지 않게 된 객체 메모리를 자동으로 수집하여 가용 메모리에 반환

가비지(garbage)

자바 응용프로그램에서 더 이상 사용되지 않게 된 객체나 배열 메모리

static 멤버

클래스당 하나만 생성되는 멤버로서 동일한 클래스의 모든 객체들이 공유하며, main() 메소드가 실행되기 전에 이미 생성됨

static 멤버가 포함된 객체를 생성하기 전에도 사용 가능

static 멤버는 클래스 멤버라고 부르며, non-static 멤버는 인스턴스 멤버라고 부름

모든 클래스에서 공유하는 전역 변수(global variable)나 모든 클래스에서 호출할 수 있는 전역 함수(global function)가 필요한 경우 사용

static 메소드의 제약 조건

  • static 메소드는 static 멤버만 접근 할 수 있다.
  • static 메소드는 this를 사용할 수 없다.

final

  • final클래스 클래스를 상속받을 수 없음을 지정
  • final메소드 오버라이딩할 수 없는 메소드임을 선언
  • final필드 필드 선언 시 변경할 수 없는 상수가 됨

참조 : 명품 JAVA Programming 개정 4판

profile
what you do matters ,but why you it matters much more 당신이 무엇을 하는지는 중요하지만, '왜' 그것을 하는지는 훨씬 더 중요합니다.

0개의 댓글