Doit ! Java_3

박다현·2023년 9월 19일
0

likelion

목록 보기
21/23
post-thumbnail

01 클래스와 객체


1.1 클래스와 객체의 개념

1.1.1 클래스의 개념

  • 변수
    다양한 형태의 데이터를 저장하기 위한 문법 요소

  • 배열
    데이터의 종류가 많아질수록 데이터의 개수만큼 변수명을 짓거나 관리하는 일이 버거운 문제를 해결하기 위해 만든 문법 요소

  • 구조체
    서로 다른 자료형을 묶어 관리할 수 있는 문법 요소

  • 객체 object
    사용할 수 있는 실체
    ex) 붕어빵

  • 클래스
    객체를 만들기 위한 설계도, 다양한 자료형의 데이터를 묶어 관리할 수 있을 뿐 아니라 데이터를 처리하는 다양한 기능까지 함께 관리하는 문법 요소
    ex) 붕어빵 기계


1.1.2 절차지향 / 객체지향

  • 절차지향 프로그래밍 Procedural Programming
    순서에 맞춰 단계적으로 실행하도록 명령어를 나열하는 방식 (기능 중심 프로그래밍)

  • 객체지향 프로그래밍 Object-Oriented Programming
    객체 단위로 수행하는 방식 (객체 중심 프로그래밍)

# 절차지향형 프로그램은 말 그대로 이야기를 순서대로 써 나가듯이 프로그램을 구성하는 방식

STEP 1 자동차의 컬러와 엔진의 종류를 지정
STEP 2 운전자의 이름과 면허번호를 지정
STEP 3 운전자는 자동차를 운전함
STEP 4 장애물 감지 YES / NO 
(NO일 경우, STEP 3 로 back)
STEP 5 운전자는 자동차 정지시킴

# 객체지향형 프로그램은 이 프로그램에서 사용되는 객체(자동차, 엔진, 운전자)를 생성하고 
  각 객체에 포함된 데이터와 기능을 상호 호출함으로써 프로그램을 구성하는 방식

1.1.3 클래스 구조

class 클래스명 {
    ... 
}
package ...; 
import ...;
class 클래스명 {...}

// 클래스 안에 올 수 있는 4가지 : 필드, 메서드, 생성자, 이너 클래스
public class A { // A는 파일명과 동일해야 함
	int a = 3;
    double abc() {...}
    A() {...}
    class 클래스명 {...}
}

* public 접근 지정자 : 최대 1개의 클래스에만 붙을 수 있음
  public이 붙은 클래스명이 파일명과 동일해야 한다는 정도는 반드시 기억할 것
# 클래스 밖에 올 수 있는 3가지 : 패키지, 임포트, 외부 클래스

- 패키지 package : 프로젝트를 생성할 때 패키지를 지정했다면 이 구성 요소에 패키지명이 포함되며 반드시 주석을 제외하고 첫 번째 줄에 위치해야 함,
                  패키지를 생성하지 않을 경우 default package USE
- 임포트 import : 다른 패키지의 클래스를 사용하고자 할 때 포함
                 Ctrl + Shift + O > 외부 클래스를 자동으로 import 가능
- 외부 클래스 external class : 클래스의 외부에 또 다른 클래스가 포함될 수 있음
                             public 키워드 붙일 수 없음
                             
# 클래스 안에 올 수 있는 4가지 : 필드, 메서드, 생성자, 이너 클래스

- 필드 field : 클래스의 특징(속성)을 나타내는 변수
- 메서드 method : 클래스가 지니고 있는 기능(함수)을 나타냄
- 생성자 cocnstructor : 클래스의 객체를 생성하는 역할
- 이너 클래스 inner class : 클래스의 내부에 포함되어 있는 클래스

1.2 객체의 생성과 활용

1.2.1 객체 생성

클래스명 참조 변수명 = new 생성자();

ex) A a = new A();
: A() 생성자로 만든 객체를 힙 메모리에 넣고 위칫값을 A타입의 참조 변수 a에 저장하라

-참조 변수명 : 실제 데이터를 저장하는 것이 아니라 실제 데이터가 있는 힙 메모리의 위칫값을 가리키는 변수
- new : 생성자의 결과물로 나온 객체를 힙 메모리에 넣음
- 생성자 : 생성자의 실행 > 클래스의 객체 생성

1.2.2 객체 활용

  • 포인트 연산자 사용 (.)
참조 변수명.필드명
참조 변수명.메서드명()


02 클래스 내부 구성 요소


2.1 필드

2.1.1 필드 / 지역 변수 구분

  • 필드 field
    클래스에 포함된 변수, 객체의 속성값 지정 가능
    클래스의 중괄호 안에 선언된 변수
직접 초기화 하지 않아도 강제로 초기화
: 힙 메모리에는 빈 공간이 저장될 수 없기 때문에 힙 메모리에 저장되는 필드는 강제 초기화 되는 것
  • 지역 변수
    메서드에 포함된 변수
    메서드의 중괄호 안에 선언된 변수
직접 초기화 하지 않으면 저장 공간이 빈 공간 그대로 있어 값을 출력하고자 할 때 오류 발생
: 스택 메모리는 강제로 초기화 되지 않으므로 여기에 저장되는 지역 변수 또한 강제로 초기화 되지 않는 것

어떤 참조 변수도 해당 객체를 가리키지 않을 때 가비지 컬렉터가 객체 자체를 제거함


2.2 메서드

자바 제어자 리턴(반환) 타입 메서드(입력매개변수) {
	메서드 내용
}

2.2.1 리턴 타입 메서드 종류

  • 리턴 타입 : void, 입력매개변수 X
void print() {
	System.out.println("안녕");
}

* 메서드가 종료된 이후에 아무런 값으로 변하지 않음
  • 리턴 타입 : int, 입력매개변수 X
int data() {
 return 1;
}
  • 리턴 타입 : double, 입력매개변수 2개
double sum(int a, double b) {
	return a + b;
}

2.2.2 메서드 호출

  • 클래스 외부에서의 메서드 호출
    STEP 1 객체 생성
    STEP 2 객체의 위치를 저장하고 있는 참조 변수를 이용해 메서드 호출

  • 클래스 내부에서의 메서드 호출
    같은 멤버끼리는 클래스 내부에서 얼마든지 객체를 생성하지 않고 서로 호출 가능

  • 입력매개변수가 배열인 메서드 호출
    STEP 1 리턴 타입의 객체 생성
    STEP 2 입력매개변수로 넘겨주기
    (실제 객체가 전달되는 것이 아니라 객체의 위칫값이 전달되는 것)


2.2.3 오버로딩 메서드

  • 메서드 시그니처 method signature
    메서드명과 입력매개변수의 자료형, 메서드를 구분하는 기준 역할

  • 메서드 오버로딩 method overloading
    입력매개변수의 개수나 자료형이 다른 여러 개의 동일한 이름을 지닌 메서드를 같은 공간에 정의하는 것

리턴 타입 메서드명 (자료형 변수명, 자료형 변수명, ..) {
}

p 241

2.2.4 가변 길이 배열 입력매개변수 메서드

개수가 정해지지 않은 가변 길이의 입력을 받는 입력매개변수로 입력된 값들은 변수로 정해짐

리턴 타입 메서드명 (자료형... 참조 변수명) {
     ...
}

2.3 생성자 constructor

클래스명 (입력매개변수) {
}

2.3.1 생성자의 특징

  • 반드시 클래스명과 동일한 이름으로 지어져야 함
  • 메서드와 비슷한 구조를 지니고 있지만 리턴 타입 존재 X

2.3.2 기본 생성자의 자동 추가

생성자를 만들지 않아도 컴파일러가 기본 생성자를 추가해줌
이미 있는 생성자를 사용해 객체를 생성할 수 있는 경우 컴파일러가 기본 생성자를 생성해주지 않음

p 250


2.3.3 생성자와 객체의 생성 방법

메서드처럼 생성자의 입력매개변수 자료형이나 개수에 따라 여러 개의 생성자 정의 가능


2.4 this 키워드 / this() 메서드

2.4.1 내부 객체 참조 변수명 this 키워드

모든 메서드에는 자신이 포함된 클래스의 객체를 가리키는 this라는 참조 변수 존재

인스턴스 메서드 내부에서는 this 사용 가능 but static 메서드 내부에서는 사용 불가능

클래스 내부에서 출력하고자 할 때 System.out.println(this.m); 과 같이 작성해야 하지만 
this.을 생략해도 컴파일러가 자동으로 this.을 추가해주기 때문에 지금가지 클래스 내부에서 필드와 메서드를 그대로 사용할 수 있던 것

2.4.2 클래스 내 다른 생성자를 호출하는 this() 메서드

자신이 속한 클래스 내부의 다른 생성자를 호출하는 명령

조건 1. 생성자의 내부에서만 사용 가능

생성자의 내부에서만 또 다른 생성자 호출 가능

조건 2. 생성자의 첫 줄에 위치해야 함

p 256

이후에 코딩 테스트 풀이를 할 때 나오게 된다면 자세한 설명 업로드 할 것


클래스는 자바에서 빼놓지 않고 사용될 수밖에 없으므로 개념부터 꼼꼼히 학습해 익히도록 한다


0개의 댓글