멋쟁이v의 개발일지

[JAVA] 클래스 본문

0년차/JAVA

[JAVA] 클래스

멋쟁이v 2023. 5. 7. 15:32
728x90
320x100

[목차]


01. 객체 지향 프로그래밍

  • 객체(Object)
    👉🏻
    객체란 물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별 가능한 것

    객체는 속성과 동작으로 구성. 자바는 이러한 속성과 동작을 각각 필드와 메소드라고 부른다.

  • 객체 지향 프로그래밍(OOP)
    👉🏻
    객체들을 먼저 만들고, 이 객체들을 하나씩 조립해서 완성된 프로그램을 만드는 기법

  • 객체의 상호작용
    👉🏻
    객체 지향 프로그램에서도 객체들은 다른 객체와 서로 상호작용하면서 동작

    객체가 다른 객체의 기능을 이용할 때, 이 메소드를 호출해 데이터를 주고 받는다.

    ➡️ 매개값 : 객체가 전달하고자 하는 데이터이며, 메소드 이름과 함께 괄호() 안에 기술

    ➡️ 리턴값 : 메소드의 실행 결과이며, 호출한 곳으로 돌려주는 값

  • 객체 간의 관계
    👉🏻
    집합 관계 : 완성품과 부품의 관계

    사용 관계 : 다른 객체의 필드를 읽고, 변경하거나 메소드를 호출하는 관계

    상속 관계 : 부모와 자식 관계. 필드, 메소드를 물려받음

  • 객체 지향 프로그래밍의 특징
    👉🏻
    캡슐화 : 객체의 데이터(필드), 동작(메소드)을 하나로 묶고, 실제 구현 내용을 외부에 감추는 것

    상속 : 부모 객체가 자기 필드와 메소드를 자식 객체에게 물려줘 자식 객체가 사용할 수 있게 함

    ➡️ 코드 재사용성 높이고, 유지 보수 시간 최소화

    다형성 : 사용 방법은 동일하지만 실행 결과가 다양

02. 객체와 클래스

  • 클래스와 인스턴스
    👉🏻
    객체 지향 프로그래밍에서도 객체를 생성하려면 설계도에 해당하는 클래스가 필요

    클래스로부터 생성된 객체를 해당 클래스의 인스턴스라고 부름

    클래스로부터 객체를 만드는 과정을 인스턴스화라고 함

    동일한 클래스로부터 여러 개의 인스턴스를 만들 수 있음

03. 클래스 선언

  • 클래스 선언
    👉🏻
    객체를 생성(생성자)하고, 객체가 가져야 할 데이터(필드)가 무엇이고, 객체의 동작(메소드)은 무엇인지를 정의

    클래스 선언은 소스 파일명과 동일하게 작성

    ➡️ public class 클래스명 { … }

    클래스명은 첫 문자를 대문자로 하고 캐멀 스타일로 작성한다.

    숫자를 포함해도 되지만 첫 문자는 숫자가 될 수 없고, 특수 문자 중 $, _를 포함할 수 있다.

    공개 클래스 : 어느 위치에 있든지 패키지와 상관없이 사용할 수 있는 클래스

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

  • 클래스 변수
    👉🏻
    클래스로부터 객체를 생성하려면 객체 생성 연산자인 new가 필요

    new 연산자는 객체를 생성시키고 객체의 주소를 리턴

    ➡️ 클래스 변수 = new 클래스();

    라이브러리 클래스 : 실행할 수 없으며 다른 클래스에서 이용하는 클래스

    실행 클래스 : main() 메소드를 가지고 있는 실행 가능한 클래

05. 클래스의 구성 멤버

  • 생성자, 필드, 메소드
    👉🏻
    필드 : 객체의 데이터를 저장하는 역할. 선언 형태는 변수 선언과 비슷하지만 쓰임새는 다름

    생성자 : new 연산자로 객체를 생성할 때 객체의 초기화 역할. 선언 형태는 메소드와 비슷하지만, 리턴 타입이 없고 이름은 클래스 이름가 동일

    메소드 : 객체가 수행할 동작. 함수로도 불림

06. 필드 선언과 사용

  • 필드 선언
    👉🏻
    필드는 클래스 블록에서 선언되어야 한다.

    ➡️ 타입 필드명 (= 초기값) ;

    ➡️ 타입은 필드에 저장할 데이터의 종류를 결정. 기본 타입, 참조 타입 모두 가능

    ➡️ 초기값을 제공하지 않을 경우 필드는 객체 생성 시 자동으로 기본값으로 초기

  • 필드 사용
    👉🏻
    필드값을 읽고 변경하는 것. 클래스로부터 객체가 생성된 후에 필드를 사용할 수 있다.

    필드는 객체 내부의 생성자와 메소드 내부에서 사용할 수 있고, 객체 외부에서도 접근해서 사용할 수 있다.

07. 생성자 선언과 호출

  • 기본 생성자
    👉🏻
    클래스에 생성자 선언이 없으면 컴파일러는 기본 생성자를 바이트코드 파일에 자동으로 추가

    기본생성자 ➡️ public 클래스명() { … }

  • 생성자 선언
    👉🏻
    객체를 다양하게 초기화하기 위해 생성자를 직접 선언할 수 있다.

    ➡️ 클래스명(매개변수, …) { … }

    생성자는 메소드와 비슷한 모양을 가지고 있으나, 리턴 타입이 없고 클래스 이름과 동일

    매개변수의 타입은 매개값의 종류에 맞게 작성

  • 필드 초기화
    👉🏻
    객체마다 동일한 값을 갖고 있다면 필드 선언 시 초기값을 대입하는 것이 좋고, 객체마다 다른 값을 가져야 한다면 생성자에서 필드를 초기화하는 것이 좋다.

  • 생성자 오버로딩
    👉🏻
    매개변수를 달리하는 생성자를 여러 개 선언하는 것

    매개변수의 타입, 개수, 선언된 순서가 똑같은 경우 매개변수 이름만 바꾸는 것은 생성자 오버로딩이 아님

    생성자가 오버로딩되어 있을 경우, new 연산자로 생성자를 호출할 때 제공되는 매개값의 타입과 수에 따라 실행될 생성자가 결정

  • 다른 생성자 호출
    👉🏻
    생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다.

    이 경우 공통 코드를 한 생성자에만 집중적으로 작성하고, 나머지 생성자는 this(…)를 사용해 공통 코드를 가진 생성자를 호출한다.

08. 메소드 선언과 호출

  • 메소드 선언
    👉🏻
    객체의 동작을 실행 블록으로 정의하는 것

  • 메소드 호출
    👉🏻
    메소드 블록을 실제로 실행하는 것

  • 가변길이 매개변수
    👉🏻
    메소드가 가변길이 매개변수를 가지고 있다면 매개변수의 개수와 상관없이 매개값을 줄 수 있다.

  • return 문

  • 메소드 오버로딩

09. 인스턴스 멤버

  • 인스턴스 멤버 선언 및 사용
    👉🏻
    인스턴스 멤버 : 필드와 메소드 등 객체에 소속된 멤버

  • this 키워드

10. 정적 멤버

  • 정적 멤버 선언
    👉🏻
    정적 멤버 : 메소드 영역의 클래스에 고정적으로 위치하는 멤버

    static 키워드를 추가해 정적 필드와 정적 메소드로 선언

  • 정적 멤버 사용
    👉🏻
    클래스가 메모리로 로딩되면 정적 멤버를 바로 사용할 수 있음

    클래스 이름과 함께 도트연산자로 접근

    정적 필드와 정적 메소드는 객체 참조 변수로도 접근

  • 정적 블록
    👉🏻
    정적 필드를 선언할 때 복잡한 초기화 작업이 필요하다면 정적 플록을 이용

    ➡️ static ( … )

  • 인스턴스 멤버 사용 불가

11. final 필드와 상수

  • final 필드 선언
    👉🏻
    final 타입 필드 (=초기값) ;

  • 상수 선언
    👉🏻
    static final 타입 상수 (=초기값) ;

12. Getter와 Setter

  • Getter, Setter
    👉🏻
    Getter

    ➡️ 필드값이 객체 외부에서 사용하기에 부적절한 경우, 적절한 값으로 변환해서 리턴할 수 있는 메소드

    Setter

    ➡️ 데이터를 검증해서 유효한 값만 필드에 저장하는 메소드

13. 싱글톤 패턴

  • 싱글톤 패턴


tag : #java #자바 #객체 #OOP #클래스 #선언 #호출 #생성자 #필드 #인스턴스화 #정적 #static #final


Uploaded by N2T

728x90
320x100
Comments