9일차 - Java강의(클래스, 필드, 생성자, 멤버, this)

2024. 7. 25. 21:04·Java & Spring/Java
목차
  1. ◇ 클래스(Class) 설계
  2. ◇ 필드
  3. ◇ 메서드
  4. ◇ 멤버
  5. ◇ 생성자
  6. ◇ this와 this()

◇ 클래스(Class) 설계

  1. 만들려고 하는 설계도를 선언(클래스 선언)

  2. 객체가 가지고 있어야 할 속성(필드) 정의

  3. 객체가 생성하는 방식을 정의(생성자) : 처음 객체가 생성 될 때(instance화) 어떤 로직을 수행해야 하며,
                                                                  어떤 값이 필수로 들어와야 하는지 정의

  4. 객체가 가지고 잇어야 할 행위(메서드)정의


◇ 필드

  • 외부 접근
    Car car = new Car(); → 객체 생성
    car.color = "blue"; → 내부 필드 접근
  • 내부 접근
    double brakePedal() {
        speed = 0;
        return speed;
    }


  • 필드의 사용
    - 초기화
    public classs Car {
        String model = "Gv80"; // 자동차 모델
        String color = "White"; // 자동차 색
        boolean lights = true;
    }


    - 필드의 사용
    package week3;
    
    public class Main {
        public static void main(String[] args) {
            Car car = new Car(); // 객체 생성
            
            // 필드 사용
            car.color = "blue";
            car.speed = 100;
            car.lights = false;
    
            System.out.println("car model = " + car.model); // Gv80 → 초기화값
            System.out.println("car color = " + car.color); // blue → 변경값
            System.out.println("car.speed = " + car.speed); // 100 → 변경값
            System.out.println("car.lights = " + car.lights); // false → 변경값
        }
    }



◇ 메서드

객체의 행위를 뜻한다

리턴타입 메서드명(매개변수, ...) {
	실행할 코드
}

double brakePedal(double par) {
	...
}

 

※ 해당 매개변수에 값을 전달하기 위해서는 순서와 타입에 맞춰 값을 넣어줘야한다.

  • 가변길이 매개변수
    void carSpeeds(double ...speeds) {
        for (double v : speeds) {
            System.out.println("v = " + v);
        }
    }
    
    carSpeeds(110, 120, 150); → 메서드 사용


  • 외부 접근 : 객체 생성 후 ' . ' 도트 연산자를 사용하면된다.
    public class Main {
        public static void main(String[] args) {
        Car car = new Car();
        car.brakePedal();
        }
    }


  • 내부 접근 : 
    public class Car {
        double gasPedal(double kmh, char type) {
            changeGear(type); → Car class 내부에 별도 선언된 메서드라 가정
            speed = kmh;
            return speed;
        }
    }


- 메서드 오버로딩

함수가 하나의 기능만을 구현하는것이 아니라 하나의 메서드 이름을 여러 기능을 구현하도록 하는 Java의 기능

  • 메서드의 이름은 같고, 매개변수의 개수, 타입, 순서가 달라야한다.
  • '응답 값만' 다른것은 오버로딩 할 수 없다.
  • 접근 제어자만 다른것도 오버로딩을 할 수 없다.
  • 오버로딩은 매개변수의 차이로만 구현 할 수 있다.
  • 오버로딩의 장점 :
    1. 메서드 이름 하나로 상황에 따른 동작을 개별로 정의
    2. 메서드 이름 절약
  • 기본형 매개변수와 참조형 매개변수의 차이 : 매개변수의 타입이 기본형일 때는 값 자체가 복사되어 넘어가기 때문에
                                                                            매개값으로 지정된 변수의 원본 값이 변경되지 않는다.
    - 기본형 매개변수
    public class Main {
        public static void main(String[] args) {
            Car car = new Car(); // 객체 생성
            
    	char type = 'D';
            car.brakePedal(type);
    
            // 메서드 실행 완료 후 전달할 매개값으로 지정된 type 값 확인
            System.out.println("type = " + type); // 기존에 선언한 값 'D' 출력, 원본 값 변경되지 않음
            // 메서드 실행 완료 후 반환된 car 인스턴스의 gear 타입 확인
            System.out.println("gear = " + car.gear); // 객체 내부에서 type을 변경하여 수정했기 때문에 'P' 출력
        }
    }

    public class Car {
    	double brakePedal(char type) {
            speed = 0;
            type = 'P'; // 정지 후 매개변수 type을 어떤 타입으로 전달 받았는지 상관없이 'P'로 고정시키기
            changeGear(type);
            return speed;
        }
    }



    - 참조형 매개변수
    public class Main {
        public static void main(String[] args) {
            Car car = new Car(); // 객체 생성
            
            Tire tire = new Tire();
            tire.company = "금호"; // 금호 타이어 객체 생성
    
            // 차 객체의 타이어를 등록하는 메서드 호출한 후 반환값으로 차 객체의 타이어 객체 반환
            Tire carInstanceTire = car.setTire(tire);
    
            // 메서드 실행 완료 후 전달할 매개값으로 지정된 참조형 변수 tire의 company 값 확인
            System.out.println("tire.company = " + tire.company); // "KIA" 출력
            // 전달할 매개값으로 지정된 tire 인스턴스의 주소값이 전달되었기 때문에 호출된 메서드에 의해 값이 변경됨.
    
            // 메서드 실행 완료 후 반환된 car 인스턴스의 tire 객체 값이 반환되어 저장된 참조형 변수 carInstanceTire의 company 값 확인
            System.out.println("carInstanceTire.company = " + carInstanceTire.company); // "KIA" 출력
        }
    }

    public class Car {
    	Tire setTire(Tire tireCompany) {
            tireCompany.company = "KIA"; // 금호 타이어를 전달 받았지만 강제로 KIA 타이어로 교체
            tire = tireCompany;
            return tire;
        }
    }




◇ 멤버

  1. 인스턴스 멤버
    • 객체를 생성해야 사용가능
  2. 클래스 멤버
    • 'static' 사용
    • 공용적인 데이터를 저장하는 필드를 보통 클래스 멤버로 선언
    • 인스턴스 필드를 사용하지 않고 실행되는 메서드가 존재한다면 static 키워드를 사용하여 클래스 메서드로 선언하는게 좋다.
      ※ 클래스 멤버로 선언된 메서드는 인스턴스 멤버를 사용할 수 없다.
  3. 지역변수
    • 메서드 내부에 선언한 변수
    • 메서드가 실행될 때마다 독립적인 값을 저장하고 관리
    • 지역 변수는 메서드 내부에서 정의될 때 생성되어 메서드가 종료될 때까지만 유지
  4. final 필드와 상수
    • final은 '최종적'이란 의미
    • final 필드는 초기값이 저장되면 해당값을 프로그램이 실행되는 도중에는 절대로 수정 불가
    • final 필드는 반드시 초기값을 지정해야함 

◇ 생성자

객체가 생성될 때 호출되며 객체를 초기화하는 역할

  1. 기본 생성자 : 선언할 때 괄호()안에 아무것도 넣지 않는 생성자
    ※ 모든 클래스는 반드시 생성자가 하나 이상 존해야함(없으면 컴파일러가 자동으로 생성)
  2. 생성자 오버로딩
    ※ modelName과 colorName의 위치가 달라 가능할 것 같지만 타입 순서가 같아서 불가능(String, String, double)
    public Car(String modelName, String colorName, double priceValue)
    public Car(String colorName, String modelName, double priceValue)
    - 아래 코드에서 Car라는 class는 3가지 형태로 오버로딩 돼 3가지 객체가 생성가능하다.
  3. public class Car { public Car(String modelName) { model = modelName; } public Car(String modelName, String colorName) { model = modelName; color = colorName; } public Car(String modelName, String colorName, double priceValue) { model = modelName; color = colorName; price = priceValue; } }

◇ this와 this()

  1. this는 객체 즉, 인스턴스 자신을 표현하는 키워드이다.
    public Car(String model, String color, double price) {
        this.model = model;
        this.color = color;
        this.price = price;
    }


    1. this()는 생성자를 표현한 것이다.
              // 모델을 변경하면서 만들 수 있고 색상 : Blue, 가격 50000000 고정
              Car car1 = new Car("GV60");
              // 모델, 색상을 변경하면서 만들 수 있고 가격 100000000 고정
              Car car2 = new Car("GV70", "Red");
              // GV80 모델, 색상 Black, 가격 120000000 으로 완전하게 고정된 경우
              Car car3 = new Car("GV80", "Black", 120000000);
       다음 코드의 Car class로 들어가보면
      public class Car {
      
          static final String COMPANY = "GENESIS"; // 자동차 회사 : GENESIS
          String model; // 자동차 모델
          String color; // 자동차 색상
          double price; // 자동차 가격
          
          public Car(String model) {
              this(model, "Blue", 50000000);
          }
      
          public Car(String model, String color) {
              this(model, color, 100000000);
          }
      
          public Car(String model, String color, double price) {
              this.model = model;
              this.color = color;
              this.price = price;
          }
      }
       위와 같다.
      - car1객체를 생성하면서 매개변수를 String model만 입력하는 경우
        public Car(String model) {
              this(model, "Blue", 50000000);
       }
       해당 명령어가 실행되고 this(model, "Blue", 50000000);는 Car(String model, String color, double price) 이므로
      public Car(String model, String color, double price) {
          this.model = model;
          this.color = color;
          this.price = price;
      }
      최종적으로 해당 코드가 실행되게 된다.




 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Java & Spring > Java' 카테고리의 다른 글

11일차 - Java강의(계산기 실습, 클래스화, 추상화)  (0) 2024.07.29
10일차 - Java강의(제어자, package, import, 상속, this, super)  (0) 2024.07.26
8일차 - Java강의(객체지향 ☆)  (0) 2024.07.24
enhanced switch()문  (0) 2024.07.24
7일차 - Java강의(연산자, 조건문, 반복문, 배열, 컬렉션)  (0) 2024.07.23
  1. ◇ 클래스(Class) 설계
  2. ◇ 필드
  3. ◇ 메서드
  4. ◇ 멤버
  5. ◇ 생성자
  6. ◇ this와 this()
'Java & Spring/Java' 카테고리의 다른 글
  • 11일차 - Java강의(계산기 실습, 클래스화, 추상화)
  • 10일차 - Java강의(제어자, package, import, 상속, this, super)
  • 8일차 - Java강의(객체지향 ☆)
  • enhanced switch()문
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java enhance switch
    java super
    프로그래머스 java 기초 트레이닝
    java arrays.copyofrnage()
    java 제어자
    java 메서드
    java 에라토스테네스의 체
    데이터 크기
    java 멤버
    java기초
    개발로드맵
    java two-pointer
    자료구조
    java 유클리드 호제법
    java
    Java 생성자
    java 세수의합
    데이터 타입
    Java this
    프로그래머스 java 기초트레이닝
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
9일차 - Java강의(클래스, 필드, 생성자, 멤버, this)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.