JAVA

[JAVA #6] 6. 객체

lyndaa 2023. 2. 27. 17:37

Chap01. 객체지향언어

  •  객체 지향 언어
    • 현실 세계는 사물이나 개념처럼 독립되고 구분되는 각각의 객체로 이루어져 있으며 발생하는 모든 사건들은 객체간의 상호작용이다. 이 개념을 컴퓨터로 옮겨 놓아 만들어낸 것이 객체지향 언어이다.
  • 자바에서 객체(Object)란 ?
    • 클래스에 정의된 내용대로 new 연산자를 통해 메모리 영역에 생성된 것(메모리에 할당)
    • 메소드 - 기능
    • 필드 - 정보, 데이터
  • 객체 지향 언어 - 클래스
    • 클래스
      • 객체의 특성에 대한 정의를 한 것으로 캡슐화(기능1, 기능2 -> 메소드, 정보들 ->필드)를 통해 기능을 포함한 개념.
      • 사물이나 개념의 공통 요소를 추상화(abstraction)하여 정의함
    • 추상화(abstraction)
      • 유연성을 확보하기 위해 구체적인 것은 제거한다는 의미
      • 프로그램에서 필요한 공통점을 추출하고 불필요한 공통점을 제거하는 과정
    • 추상화(abstraction) 예시
      • 추상화한 결과물을 객체 지향 프로그래밍 언어를 사용해서 변수명(데이터 이름)과 자료형(데이터 타입)을 정리함
      • 다이어그램으로 표현 가능 (- : privatte, + : public -> 데이터 접근 제한자)
      • 클래스(class) -> 객체(instance)
      • 클래스를 기반으로 객체를 만들어간다. 인스턴스화 instantiation
    • 객체(instance)의 할당
      • new 연산자와 생성자를 사용하여 객체를 생성하면 heap 메모리 공간에 서로 다른 자료형의 데이터가 연속으로 나열/할당된 객체 공간이 만들어진다. 이를 인스턴스(instance)라고 한다.
      • e.g.
        • Student s = new Student();
        • Stack : s -> Heap : Student type의 객체
  • 객체 지향 3대 특징
    • 캡슐화 (Encapsulation) (+추상화)
    • 상속 (Inheritance)
    • 다형성 (Polymorphism)
  • 캡슐화
    • 캡슐화란? 
      • 추상화를 통해 정리된 데이터들과 기능을 클래스안에 하나로 묶어 관리하는 기법
      • 클래스의 가장 중요한 목적인 데이터의 접급제한을 원칙으로 하여 클래스 외부에서 데이터의 직접 접근을 막고 대신 데이터를 처리하는 함수들을 클래스 내부에 작성하는 방법을 캡슐화라고 한다.
    • 캡슐화 원칙
      • 클래스의 멤버 변수에 대한 접근 권한은 private(-)을 원칙으로 한다.
      • 클래스의 멤버 변수에 대한 연산처리를 목적으로 하는 함수들을 클래스 내부에 작성한다.
      • 멤버 함수는 클래스 밖에서 접근할 수 있도록 public(+)으로 설정한다.

 

Chap02. 클래스

  • 클래스 선언
    • [접근제한자][예약어] (생략 가능) class 클래스명{
      //필드 멤버 변수
           [접근제한자][예약어] 자료형 변수명;
           [접근제한자][예약어] 자료형 변수명;
      //메소드
           [접근제한자] 생성자명(){}
           [접근제한자] 반환명 메소드명(매개변수()){
                   //기능 정의
            }
      }
  • getter 메소드 / setter 메소드
    • public String getName(){
                  return name;
      }
    • public void setName(String name){
                   this.name = name;
      }
  • 클래스 접근제한자
    • public : 전체 / (default) : 같은 패키지 내에서만
    • 메소드 : public / protected / (default) / private
    • 필드 : public / protected / (default) / private

Chap03. 필드

  • 객체 생성 시 클래스의 각 필드의 공간이 할당됨 -> 묶여서
  • 클래스 선언 아래에
    • [접근제한자](거의 praivate) [예약어](final, static) 자료형 변수명 [=초기값];
    • 접근제한자 생략 시 default
    • 캡슐화의 원칙으로 private 사용
  • 필드 예약어 - static
    • 같은 타입의 여러 객체가 공유할 목적의 필드에 사용하며, 프로그램 start 시에 정적 메모리 영역에 자동 할당되는 멤버에 적용한다.
    • 메서드가 static이여도 호출이 되어야 사용 가능하므로 메서드의 변수(지역변수)에서는 static 사용못함
    • 전역변수에서만 static 키워드 사용 가능
  • 필드 예약서 - final
    • 하나의 값만 계속 저장해야하는 변수에 사용하는 예약어
  • 클래스 초기화 블럭
    • 인스턴스 블럭 ({}) - 인스턴스 변수를 초기화시키는 블럭으로 객체 생성 시 마다 초기화
    • static(클래스) 블럭 (static{}) - static 필드를 초기화시키는 블럭으로 프로그램 시작 시 한번만 초기화
    • e.g.
      • [접근제한자] static 자료형 필드1;
      • [접그제한자] 자료형 필드2;
      • static{필드1 = 초기값;}
        {필드2 = 초기값;}
  • 필드 초기화
    • 기본값
    • 필드 선언 시
    • 초기화 블럭

+++ package와 import

  • 소스파일 구성 순서
    • package문
    • import문
    • 클래스 선언
  • package
    • 서로 관련된 클래스 혹은 인터페이스의 묶음이다.
    • 클래스가 클래스파일(*.class)인 것 처럼 패키지는 폴더와 비슷하다.
    • 패키지는 서브 패키지를 가질 수 있으며 '.'으로 구분한다.
    • 패키지가 선언되지 않은 클래스는 자동적으로 이름없는 패키지에 속하게 된다.
  • import
    • 사용할 클래스가 속한 패키지를 지정하는데 사용한다.
    • import문을 사용하면 클래스를 사용할때 패키지명을 생략할 수 있다.
    • java.lang 패키지의 클래스는 import하지 않고도 사용할 수 있다.
    • import문은 컴파일 시에 처리되므로 프로그램 성능에 아무런 영향을 주지 않는다.
    • 지정된 패키지에 포함된 클래스는 import 가능하지만 서브 패키지에 속한 모든 클래스까지 import 불가능하다.
      • import java.utio.*; //java.util 패키지 내의 모든 클래스

Chap04. 생성자(Constructor)

  • 생성자란?
    • 객체가 new 연산자를 통해 Heap 메모리 영역에 할당될 때 객체 안에서 만들어지는 필드의 초기화를 담당하낟.
    • 생성자는 일종의 메소드로 전달된 초기값을 받아서 객체의 필드에 기록한다.
  • 생성자 규칙
    • 생성자의 선언은 메소드 선언과 유사하나 반환값이 없다.
    • 생성자명을 클래스명과 똑같이 지정해줘야된다.
  • 기본 생성자
    • 작성하지 않은 경우, 클래스 사용시 JVM이 자동으로 기본 생성자 생성해준다.
  • 매개변수 생성자
    • 객체 생성 시 전달받은 값으로 객체를 초기화(필드를 초기화) 하기 위해 사용한다.
    • 매개변수 생성자 작성 시 JVM이 기본 생성자를 자동으로 생성해주지 않는다.
    • 상속에서 사용 시 반드시 기본 생성자를 작성해야 된다.
    • 오버로딩***을 이용하여 작성한다.
  • 오버로딩
    • 오버로딩이란?
      • 한 클래스 내에 동일한 이름의 메소드를 여러개 작성하는 기법
    • 오버로딩 조건
      • 메소드 이름이 같아야되낟.
      • 매개변수의 개수 또는 타입이 달라야한다.
  • this
    • 모든 인슽턴스의 메소드에 숨겨진 채 존재하는 레퍼런스로, 할당된 객체를 가리킨다.
    • 함수 실행 시 전달되는 객체의 주소를 자동으로 받는다.
    • 매개변수가 우선순위가 더 높음 -> this라는 키워드를 통해 구분
    • 사용 시 반드시 첫번재 줄에 선언해야한다.
  • this() 생성자
    • 같은 클래스의 다른 생성자를 호출할 때 사용한다.
    • e.g.
    • 기본 생성자 public Academy() {this(20,"김철수");}
    • public Academy(int age, String name){
           this.age = age; this.name = name;
      }

Chap05. 메소드

  • 메소드란 ?
    • 수학의 함수와 비슷하며 호출을 통해 사용한다. 전달 값이 없는 상태로 호출을 하거나 어떤 값을 전다랗여 호출을 하며, 함수 내에 작성된 연산을 수행한다.
    • 수행 후 반환 값 / 결과 값은 있거나 없을 수 있다.
  • 메소드 예약어
    • static : static 영역에 할당하여 객체 생성 없이 사용함
    • final : 종단의 의미, 상속 시 오버라이딩 불가능
    • abstract : 미완성된, 상속하여 오버라이딩으로 완성시켜 사용해야 함
    • synchronized : 동기화 처리, 공유 자원에 한개의 스레드만 접근 가능함
    • static final(final static) : static과 final의 의미를 둘 다 가짐
  • 메소드 반환형
    • void : 반환형이 없음을 의미, 반환값이 없을 경우 반드시 작성
    • 기본 자료형 : 연산 수행 후 반환 값이 기본 자료형일 경우 사용함
    • 배열 : 연산 수행 후 반환값이 배열인 경우 배열의 주소값이 반환 (new : 메모리에 공간을 할당하고 주소값 가져옴)
    • 클래스 : 연산 수행 후 반환값이 해당 클래스 타입의 객체일 경우, 해당 객체의 주소값이 반환 (클래스 == 타입)
  • 메소드 매개변수
    • () : 매개변수 없음
    • 기본 자료형
    • 배열 / 클래스
    • 가변인자

'JAVA' 카테고리의 다른 글

[JAVA #7] 8. 상속(Inherit)  (0) 2023.02.28
[JAVA #7] 7. 객체 배열  (0) 2023.02.28
[JAVA 실습 #5] 5. 2차원 배열  (0) 2023.02.26
[JAVA 실습 #5] 4. 배열(Array)  (0) 2023.02.25
[JAVA #5] 4. 배열(Array), 5. 2차원 배열  (0) 2023.02.25