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

2024. 7. 25. 21:04·Java & Spring/Java

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

  • 최근 글

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

티스토리툴바