개발자를 꿈꾸는 여정

[JAVA 자바] 5. 클래스(class) 본문

2. Back Developer

[JAVA 자바] 5. 클래스(class)

아카라타 2021. 10. 24. 21:36

1.  객체 지향 프로그래밍

      • 객체 지향 프로그램 : 부품 객체를 먼저 만들고 이것들을 하나씩 조립해 완성된 프로그램을 만드는 기법
      • 객체(Object)?
        -
        물리적으로 존재하는 (자동차, , 사람)
        - 추상적인 것(회사, 날짜) 중에서 자신의 속성과 동작을 가지는 모든 것
        - 객체는 필드(속성) 과 메소드(동작)로 구성된 자바 객체로 모델링 가능
    • 객체의 상호작용 : 객체들은 서로 간에 기능(동작)을 이용하고 데이터를 주고 받음
    •  객체 간의 관계
      객체는 다른 객체와 관계를 맺음
      1) 집합 관계: 완성품과 부품의 관계
      2) 사용 관계: 객체가 다른 객체를 사용하는 관계
      3) 상속 관계: 종류 객체와  구체적인 사물 객체 관계
        • 객체의 캡슐화 : 자바 언어는 캡슐화된 멤버를 노출시킬 것인지 숨길 것인지 결정하기 위해 접근 제한자(Access Modifier) 사용
        •  상속 : 상위(부모) 객체의 필드와 메소드를 하위(자식) 객체에게 물려주는 행위
        • 하위 객체는 상위 객체를 확장해서 추가적인 필드와 메소드를 가질 수 있음
        • 상속 대상 : 필드와 메소드
        •  상속의효과
          - 상위 객체를 재사용해서 하위 객체를 빨리 개발 가능 / - 반복된 코드의 중복을 줄임
          -
          유지 보수의 편리성 제공 / - 객체의 다형성 구현
        • 다형성 : 같은 타입이지만 실행 결과가 다양한 객체를 대입할 수 있는 성질
          -
          부모 타입에는 모든 자식 객체가 대입
          - 인터페이스 타입에는 모든 구현 객체가 대입

2.  객체와 클래스 : 설계도 => 객체

- 클래스에는 객체를 생성하기 위한 필드와 메소드가 정의

- 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스(instance)

- 하나의 클래스로부터 여러 개의 인스턴스를 만들 수 있음

3. 객체 생성과 클래스 변수

1) new 연산자 : 객체 생성 역활

- 클래스()는 생성자를 호출하는 코드

- 생성된 객체는 힙 메모리 영역에 생성

2) new 연산자는 객체를 생성 후, 객체 생성 번지 리턴

3) 클래스 변수 : 힙 영역의 객체를 사용하기 위해 사용

4) 클래스의 용도

- 실행용 : main() 메소드를 가지고 있는 클래스로 실행할 목적으로 만든 클래스

4. 클래스의 구성 멤버

1) 필드

- 필드의 사용 : 필드 값을 읽고, 변경하는 작업을 말한다.

- 필드의 사용위치

 (1) 객체 내부: “필드이름” 으로 바로 접근

 (2)객체 외부: “변수.필드이름”으로 접근

2) 생성자

(1) new 연산자에 의해 호출되어 객체의 초기화 담당

(2) 모든 클래스는 생성자가 반드시 존재하며 하나 이상 가질 수 있음

(3) 생성자 선언을 생략하면 컴파일러는 다음과 같은 기본 생성자 추가

(4) 필드 초기화 : 초기값 없이 선언된 필드는 객체가 생성될 때 기본값으로 자동 설정

(5) 다양화 이유 : 객체 생성할 때 외부 값으로 객체를 초기화할 필요 / 생성자 다양화

(6) 생성자 오버로딩 : 매개변수의 타입, 개수, 순서가 다른 생성자 여러 개 선언

(7) 다른 생성자 호출 ( this() )

   - 생성자 오버로딩되면 생성자 간의 중복된 코드 발생

   - 다른 생성자는 초기화 내용을 작성한 생성자를 this(…)로 호출

 

3) 메소드

(1) 객체의 동작(기능)

(2) 호출해서 실행할 수 있는 중괄호 { } 블록

(3) 메소드 호출하면 중괄호 { } 블록에 있는 모든 코드들이 일괄 실행

(4) 메소드 선언

(5) 메소드 리턴 타입 : 메소드 실행된 후 리턴하는 값의 타입

 - 메소드는 리턴값이 있을 수도 있고 없을 수도 있음

 

(6) 리턴문 : 메소드 실행을 중지하고 리턴값 지정하는 역할 (return 문 뒤에 실행문 올 수 없음)

- 메소드 실행을 강제 종료 시키는 역할

 

(7) 메소드 호출 : 메소드는 클래스 내∙외부의 호출에 의해 실행

- 클래스 내부 : 메소드 이름으로 호출

- 클래스 외부 : 객체 생성 후, 참조 변수를 이용해 호출

(8) 메소드 오버로딩 

 - 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것

 - 하나의 메소드 이름으로 다양한 매개값 받기 위해 메소드 오버로딩

 - 오버로딩의 조건: 매개변수의 타입, 개수, 순서가 달라야 함

(9) 인스턴스 멤버

-  객체 (인스턴스) 마다 가지고 있는 필소드와 메소드 (객체 소속된 멤버라 객체없이 사용 불가)

 

(10)  this

- 객체(인스턴스) 자신의 참조(번지)를 가지고 있는 키워드

- 객체 내부에서 인스턴스 멤버임을 명확히 하기 위해 this. 사용

- 매개변수와 필드명이 동일할 때 인스턴스 필드임을 명확히 하기 위해 사용

 

(11) 정적멤버와 static

- 클래스에 고정된 필드와 메소드 - 정적 필드, 정적 메소드

- 정적멤버는 클래스에 소속된 멤버

  -> 객체 내부에 존재하지 않고, 메소드 영역에 존재

  -> 정적 멤버는 객체를 생성하지 않고 클래스로 바로 접근해 사용

- 필드 또는 메소드 선언할 때 static 키워드 붙임

- 정적 멤버 사용 : 클래스 이름과 함께 도트(.) 연산자로 접근

  인스턴스 멤버 선언 정적 멤버 선언의 기준
필드 객체 마다 가지고 있어야 할 데이터 공용적인 데이터
메소드 인스턴스 필드로 작업해야 할 메소드 인스턴스 필드로 작업하지 않는 메소드