ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클래스와 객체
    언어/Java 2021. 6. 3. 09:30

    개인 공부 후 정리 목적인 글입니다.

     

     

     

     

    실세계 객체의 특징 : 객체마다 고유한 특성(state)과 행동(behavior)를 가진다.

                               다른 객체들과 정보를 주고 받는 등의 상호작용을 하면서 존재한다.

     

    객체

     - 클래스의 모양대로 생성된 실체로 객체 내 데이터에 대한 보호, 외부의 접근을 제한

     

    캡슐화 

    - 객체를 캡슐로 싸서 내부를 볼 수 없게 하는 것

    - 외부의 접근으로부터 객체를 보호

     

    클래스

     - 객체 모양을 선언한 틀(캡슐화)

     - 메소드(멤버 함수)와 필드(멤버 변수)는 모두 클래스 내에서 구현한다.

     

     

    객체 지향의 특성

    상속

     - 상위 객체의 속성이 하위 객체에 물려지는 것으로 하위 객체가 상위 객체의 속성을 모두 가지는 관계

     - 자식 클래스가 부모 클래스의 속성을 물려받고, 기능을 확장한다.

    부모 클래스 : 수퍼 클래스

    하위(자식) 클래스 : 서브 클래스, 수퍼 클래스를 재사용하고 새로운 특성을 추가

     

    다형성

     - 같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현

    메소드 오버로딩 : 같은 이름이지만 다르게 작동하는 여러 메소드

    메소드 오버라이딩 : 슈퍼 클래스의 메소드를 서브 클래스마다 다르게 구현

     

     

    객체 지향 언어의 목적

    소프트웨어의 생산성 향상

     - 컴퓨터 산업 발전에 따라 소프트웨어의 생명 주기(life cycle) 단축

     - 객체 지향 언어 -> 소프트웨어의 재사용, 빠른 수정, 다시 만드는 부담 줄임, 생산성 향상

     

     

    절차 지향 프로그래밍과 객체 지향 프로그래밍

    절차 지향 프로그래밍

     - 작업 순서 표현

     - 작업을 함수로 작성한, 함수들의 집합

    객체 지향 프로그래밍

     - 객체들 간의 상호작용으로 표현

     - 클래스 혹은 객체들의 집합으로 프로그램 작성

     

     

    클래스와 객체 

    클래스

     - 객체를 만들어내기 위한 설계도 혹은 틀

     - 객체의 속성과 행동을 포함

    클래스 선언, class Circle

     - class 키워드로 선언, 클래스는 { 로 시작하여 } 로 닫으며 이곳에 모든 필드와 메소드를 구현한다.

     - class Circle은 Circle 이름의 클래스를 선언하고 클래스의 접근 권한은 public(다른 클래스에서 Circle 클래스를 사용하거나 접근할 수 있음을 선언한다)

    필드와 메소드

     - 필드(field) : 객체 내에 값을 저장하는 멤버 변수

     - 메소드(method) : 함수이며 객체의 행동(행위)를 구현한다.

    필드의 접근 지정자, public

     - 필드나 메소드 앞에 붙어 다른 클래스의 접근 허용을 표시

     - public 접근 지정자 : 다른 모든 클래스의 접근을 허용한다.

    생성자 

     - 클래스의 이름과 동일한 특별한 메소드로 객체가 생성될 때 자동으로 한 번 호출되는 메소드

     - 개발자는 객체를 초기화하는데 필요한 코드를 작성한다.

     

     

    객체

     - 클래스의 모양 그대로 찍어낸 실체 (프로그램 실행 중에 생성되는 실체,

                                                    메모리 공간을 갖는 구체적인 실체, 인스턴스(instance)라고도 부름)

                    * 객체들은 클래스에 선언된 동일한 속성을 가지지만, 객체마다 서로 다른 고유한 값으로 구분된다. *

    객체 생성

     - 반드시 new 키워드를 이용하여 생성(new는 객체의 생성자 호출)

    객체 생성 과정

     - 객체에 대한 레퍼런스 변수 선언

     - 객체 생성(클래스 타입 크기의 메모리 할당, 객체 내 생성자 코드 실행)

    객체의 멤버 접근

     - 객체 레퍼런스.멤버

     

     

    생성자 / 생성자의 특징

    생성자

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

    생성자의 특징

     - 생성자는 메소드로 생성자 이름은 클래스 이름과 반드시 동일해야 된다.

     - 생성자는 여러 개 작성이 가능하며(오버로딩) new를 통해 객체를 생성할 때, 객체당 한 번 호출 가능하다.

     - 생성자는 리턴 타입을 지정할 수 없으며 객체를 초기화하는 목적

     - 생성자는 객체가 생성될 때 반드시 호출됨으로 하나 이상 선언되어야 한다.

     

    기본 생성자

    - 매개 변수가 없고 아무 작업 없이 단순 리턴하는 생성자디폴트 생성자라고도 부른다.

    - 클래스에 생성자가 하나도 선언되지 않은 경우, 컴파일러에 의해 자동으로 삽입

     

     

    this 레퍼런스

    this

     - 객체 자신에 대한 레퍼런스(컴파일러에 의해 자동 관리, 개발자는 사용만 하면 됨)

    this가 필요한 경우

     - 객체의 멤버 변수와 메소드 변수의 이름이 같은 경우

     - 다른 메소드 호출 시 객체 자신의 레퍼런스를 전달할 때 

     - 메소드가 객체 자신의 레퍼런스를 반환할 때

    this()로 다른 생성자 호출

     - 클래스 내의 다른 생성자 호출

     - 생성자 내에서만 사용 가능

     - 반드시 생성자 코드의 제일 처음에 수행

     

     

    객체 치환 : 레퍼런스가 복사된다.

     

     

    메소드 형식

    메소드

     - 클래스의 멤버 함수로 자바의 모든 메소드는 반드시 클래스 안에 있어야 한다.(캡슐화 원칙)

    메소드 구성 형식

     - 접근 지정자 : public, private, protected, 디폴트(접근 지정자가 생략된 경우)

     - 리턴 타입 : 메소드가 반환하는 값의 데이터 타입

     

    자바의 인자 전달 방식

    1. 기본 타입의 값 전달 (매개변수가 byte, int, double 등 기본 타입의 값일 때)

     - 호출자가 건네는 값이 매개변수에 복사되어 전달, 실인자 값은 변경되지 않는다.

     - 메소드의 매개변수가 변경되어도 호출한 실인자 값은 변경되지 않는다.

    2. 객체 혹은 배열 전달

     - 객체나 배열의 레퍼런스만 전달(객체 혹은 배열이 통째로 복사되어 전달되는 것이 아님)

     - 메소드의 매개변수와 호출한 실인자 객체나 배열 공유

    객체 전달(객체의 레퍼런스만 전달) : 매개 변수가 실인자 객체 공유

    배열 전달(배열 레퍼런스만 매개 변수에 전달) : 배열 통째로 전달되지 않고 객체가 전달되는 경우와 동일,

                                                                 매개 변수가 실인자의 배열을 공유

     

     

    메소드 오버로딩(Overloading)

     - 이름이 같은 메소드 작성(매개변수의 개수타입이 서로 다르고 이름이 동일한 메소드들)

     - 리턴 타입은 오버로딩과 관련 없음

     

     

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

    객체 소멸

     - new에 의해 할당된 객체의 메모리를 자바 가상 기계의 가용 메모리로 되돌려 주는 행위

    자바 응용프로그램에서 임의로 객체 소멸할 수 없음

     - 객체 소멸은 자바 가상 기계의 고유한 역할

     - 자바 개발자에게는 매우 다행스러운 기능

    가비지

     - 가리키는 레퍼런스가 하나도 없는 객체(누구도 사용할 수 없게 된 메모리)

     - 자바 가상 기계의 가비지 컬렉터가 자동으로 가비지 수집 반환

     

     

     

     

     

     

     

     

     

     

     

     

     

    '언어 > Java' 카테고리의 다른 글

    switch/case 문  (0) 2021.05.15
    Java 조건문 & 반복문  (1) 2021.05.13
    Java 연산자  (2) 2021.05.09
    Java Scanner 클래스  (0) 2021.05.09
    Java 변수와 자료형  (2) 2021.05.08
Designed by Tistory.