Java Class 구조

2023. 3. 31. 14:53·📘 Backend/Java

📘 클래스

  • 객체를 정의하는 틀 또는 설꼐도와 같은 의미
  • 객체의 상태를 나타내는 필드 / 객체의 행동을 나타내는 메소드로 구성됨
  • 하나의 클래스로부터 여러개의 인스턴스 (인스턴스==메모리에 할당된 객체); 생성 가능

클래스의 구성요소

  • 필드 : 클래스의 속성을 나타내는 변수
  • 메소드 : 클래스의 기능을 나타내는 함수
  • 생성자 : 클래스의 객체 생성
  • 이너 클래스 : 클래스 내부의 클래스

클래스 예시

차(Car)

  • 설계도

필드(field)

  • car.modelName = "람보르기니"
  • car.modelYear = 2016
  • car.color = "주황색"
  • car.maxSpeed = 350

메소드(method)

  • car.accelerate()
  • car.brake()

인스턴스 == 객체(instance)

  • 내 차(myCar) : 설계도에 의해 생산된 차량
  • 친구 차(friendCar) : 설계도에 의해 생산된 또 다른 차량

📘 객체

  • 속성(filed)과 객체(method) 로 정의
  • 하나의 객체는 다양한 속성과 기능의 집합으로 이루어질 수 있음
  • 이러한 속성과 기능은 이너클래스와 함께 객체의 멤버 라고 부름

예시

속성 : 모델, 바퀴개수, 문개수, 색상 등

img

기능 : 시동, 가속, 정지 등

img


객체의 생성

  • new 키워드를 사용하여 객체 생성, 생성후 포인트연산자 . 을 통해 해당 객체의 멤버에 접근 가능함

img


기본형식

  • 클래스명 참조_변수명; // 인스턴스 참조를 위한 참조변수 선언

    • ex) class Car
  • 참조_변수명 = new 생성자(); // 인스턴스 생성 후, 객체의 주소 -> 참조변수에 저장

    • ex) Car = new Car();
  • ※ 간편식 = 클래스명 참조_변수명 = new 생성자();


Back단에서의 동작방식

  • 참조변수는 실제 데이터값을 저장 X , 실제 데이터가 위치해있는 힙 메모리의 주소를 저장하는 변수
  • 즉, 객체를 생성한다는 것은 해당 객체를 힙메모리에 넣고 그 주소값을 참조변수에 저장 하는것과 동일함
  • 간단히 말하면, 객체의 필드값은 객체내부에 있고 내부에있는 메소드는 클래스영역에 1개만 두고 공유함

img


객체 활용

  • 객체의 응용에서 중요한 부분은 포인트연산자 . 이며, 해당 위치에 있는 객체 내부를 보세요 라는 의미임

CarTest Class 생성

img


Car Class 생성

img

Car 클래스

  • model과 color의 속성을가지며 power(), accelerate(), stop()의 기능을 가지고 있음

CarTest 클래스

  • tesla 인스턴스를 생성해 Car 클래스에서 정의한 속성과 기능을 method를 이용해 출력

📘 필드

  • 클래스에 포함된 변수를 의미하며, 객체의 속성을 정의할때 사용함
  • 자바는 클래스&인스턴스&지역 변수로 구분되는데, 필드는 클래스&인스턴스 변수임
  • 위의 인스턴스&클래스 변수는 static 키워드의 유무로 구분 가능
  • static과 함께 선언된건 클래스변수, 그렇지 않은건 인스턴스 변수
  • 위의 두가지 모두 해당되지 않을때는 메소드내에 포함된 모든 변수는 지역변수임

img


인스턴스 변수

  • 고유한 속성을 저장하기 위한 변수

클래스 변수

  • 한 클래스에 생성된 모든 인스턴스들이 특정한 값을 공유해야 하는 경우 static 선언
  • 클래스 변수는 인스턴스를 따로 생성안해도 클래스명.클래스변수명을 통해 사용가능

지역 변수

  • 메소드 내에서만 선언되며 메소드 내 ( {} ) 블록 에서만 사용가능
  • ※ 지역변수와 다르게 필드변수는 자동으로 강제초기화가 됨

img


📘 Method

  • 특정 작업을 수행하는 일련의 명령문들의 집합 (클래스의 기능)
  • 메소드 시그니처(머리) 메소드 바디(몸) 으로 구분할 수 있다
public static int add(int x, int y) { // 메소드 시그니처

  int result = x + y; // 메소드 바디

  return result;

※ 반환타입이 void 가 아닌경우는 전부 return문을 써야한다.


메소드 호출

  • 클래스의 멤버이므로 클래스 외부에서 메소드를 사용하기 위해서 먼저 인스턴스를 생성해야하고, . 을통해 호출

    메소드 오버로딩

  • 하나의 클래스 안에 같은 이름의 다수의 메소드 정의

    오버로드 성립 조건

  • 같은 이름의 메소드명 사용

  • 매개변수의 개수나 타입이 다르게 정의되어야 함

public class Overloading {

  public static void main(String[] args) {
    Shape s = new Shape(); // 객체 생성
    s.area(); // 메소드 호출
    s.area(5);
    s.area(10,10);
    s.area(6.0, 12.0);
  }

class Shape {
  public void area() { // 메소드 오버로딩, 같은이름의 메소드 4개
    System.out.println("넓이");
  }

  public void area(int r) {
    System.out.println("원 넓이 = " + 3.14 * r * r);
  }

  public void area(int w, int l) {
    System.out.println("직사각형 넓이 = " + w * l);
  }

  public void area(double b, double h) {
    System.out.println("삼각형 넓이 = " + 0.5 * b & h);
  }
}

Overloading 클래스에서 오버로딩의 값을 정의하고

Shape 클래스에서 타입을 지정해줌

출력값

넓이

원 넓이 = 78.5

직사각형 넓이 = 100

삼각형 넓이 = 36.0

저작자표시 (새창열림)

'📘 Backend > Java' 카테고리의 다른 글

Java Constructor  (0) 2023.03.31
Java Static  (0) 2023.03.31
Java Array  (0) 2023.03.31
Java 제어문 & 반복문  (0) 2023.03.31
Java Operator & I/O  (0) 2023.03.31
'📘 Backend/Java' 카테고리의 다른 글
  • Java Constructor
  • Java Static
  • Java Array
  • Java 제어문 & 반복문
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      Lock #Thread #Concurrency
      GStreamer #Pipeline
      React #Markdown
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Java Class 구조
    상단으로

    티스토리툴바