[Java] 객체, 클래스, 매개변수, Overloading

CountryGirl·2023년 5월 30일
0

Java

목록 보기
4/18
post-thumbnail

📌 객체

  • 세상에 존재하는 물체를 뜻하여 식별이 가능한 것을 의미
  • 속성과 행위로 구성되어있다.
  • Java에서는 속성과 행위를 필드와 메서드로 정의하여 구현할 수 있다.

📝 소프트웨어의 객체 간의 관계

  • 사용관계

  • 포함관계

  • 상속관계


📝 객체지향 프로그래밍의 특징

  • 캡슐화 (encapsulation)

    • 속성(필드)와 행위(메서드)를 하나로 묶어 객체로 만든 후 실제 내부 구현 내용은 외부에서 알 수 없게 감추는 것을 의미
    • 외부 객체에서는 캡슐화된 객체의 내부 구조를 알 수 없기 때문에 노출시켜 준 필드 혹은 메서드를 통해 접근할 수 있다.

      이유

      1. 외부 객체에서 해당 필드와 메서드를 잘못 사용하여 객체가 변하지 않게 한다.
      2. 보안때문에 중요할 수 있다. 필요하지 않은 것을 굳이 외부로 노출시키지 않아 혼란을 줄인다

  • 상속

    • 객체지향 프로그래밍에는 부모 객체와 자식 객체가 존재한다.
    • 부모 객체는 가지고 있는 필드와 메서드를 자식 객체에 물려주어 자식 객체가 이를 사용할 수 있도록 한다.
    1. 각각의 객체들은 상속 관계로 묶음으로써 객체 간의 구조를 파악하기 쉬워진다.
    2. 필드와 메서드를 변경하는 경우 부모 객체에 있는 것만 수정하게 되면 자식 객체 전부 반영이 되기 때문에 일관성을 유지하기 좋다.
    3. 자식 객체가 부모 객체의 필드와 메서드를 물려받아 사용할 수 있기 때문에 코드의 중복이 줄어들며 코드의 재사용성이 증가된다.

  • 다형성

    • 객체가 연산을 수행할 때 하나의 행위에 대해 각 객체가 가지고 있는 고유한 특성에 따라 다른 여러가지 형태로 재구성되는 것을 말한다.

  • 추상화 (abstraction)

    • 객체에서 공통된 부분들을 모아 상위 개념으로 새롭게 선언하는 것
    • 공통적이고 중요한 것을 모아 객체를 모델링한다.

📌 클래스

  • 객체를 만들기 위해서는 클래스가 필요하다.
  • 이 때 클래스를 토대로 생성된 객체를 해당 클래스의 인스턴스라고 부르며 이 과정을 ‘인스턴스화’라고 부른다.
  • 동일한 클래스로 여러 개의 인스턴스를 만들 수 있다.
  • 클래스를 이용해서 만든 객체까지도 변수 형태로 저장되기 때문에 배열로서 관리가 될 수도 있다 ➡️ 확장성 高

📝 클래스 만들기 (4단계)

  1. 만들려고 하는 설계도를 선언한다. (클래스 선언)
  2. 객체가 가지고 있어야할 속성(필드)을 정의한다.
  3. 객체가 생성하는 방식을 정의한다. (생성자: Constructor)
  4. 객체가 가지고 있어야할 행위(메서드)를 정의한다.

📝 필드

객체의 데이터를 저장하는 역할

필드 타입별 기본값

데이터 타입(data type)기본값 (defalut)
byte0
char\n0000 (공백)
short0
int0
long0L
float0.0F
double0.0
booleanfalse
배열null
클래스null
인터페이스null

필드 접근 방법

  • 외부 접근: 도트(.:dot)연산자를 사용하여 접근한다.
  • 내부 접근

필드를 사용한다 = 필드의 값을 변경하거나 읽는다.
우리가 클래스에 필드를 정의하여 선언했다고 해서 바로 사용할 수 있는 것은 아니다.
클래스는 설계도일뿐 실제로 필드의 데이터를 가지고 있는 것은 객체이다
따라서 객체를 생성한 후에 필드를 사용할 수 있다.

Tire tire = new Tire();
이렇게 초기화를 하게 되면 주소값이 할당된다.

🚨 클래스는 객체가 아니다. 설계도다. ex) 붕어빵 틀


📌 메서드 & 매개변수

📝 메서드

변수를 넣은 것을 제어할 수 있는 것이 메서드

선언

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

리턴타입

double brakePedal() {...} // double 타입 반환
char brakePedal() {...} // char 타입 반환
boolean brakePedal() {...} // boolean 타입 반환
void brakePedal() {...} // 반환할 값 없음

만약 return type이 void가 아니라면 반드시 리턴하는 것이 있어야 한다 ➡️ 반드시 return문이 있어야한다.

반환할 값이 없을때는 리턴타입에 void를 작성한다.

  • 반환값이 없으므로 return문을 반드시 지정할 필요는 없다.
  • 메서드는 실행할 때 return문을 만나면 그대로 종료하게 되는데 void타입일 때 return;이렇게 return 문을 사용하여 원하는 지점에서 메서드를 종료할 수도 있다.

📝 매개변수

double gasPedal(double kmh, char type) {
	speed = kmh;
    return speed;
}
  • 매개변수는 메서드를 호출할 때 메서드로 전달하려는 값을 받기 위해 사용되는 변수
  • gasPedal(double kmh, char type) 메서드의 매개변수는 double 타입의 kmh, char 타입의 type이다.
    • 해당 매개변수에 값을 전달하기 위해서는 순서와 타입에 맞춰 값을 넣어준다
  • 전달하려는 값이 없다면 생략가능하다.
  • 가변길이의 매개변수도 선언할 수 있다.

가변길이의 매개변수

void carSpeeds (double ... speeds) {
    for(double v : speeds) {
        System.out.println("v = " + v);
    }
}

car.carSpeeds(100, 80);
car.carSpeeds(110, 120, 150);
  • double ... speeds 이렇게 ... 을 사용하면 매개값을 , 로 구분하여 개수 상관없이 전달이 가능하다

기본형 매개변수

메서드를 호출할 때 전달할 매개값으로 지정한 값을 메서드의 매개변수에 복사해서 전달한다.

  • 매개변수의 타입이 기본형일 때는 값 자체가 복사되어 넘어가기 때문에 매개값으로 지정된 변수의 원본 값이 변경되지 않는다.

참조형 매개변수

메서드를 호출할 때 전달할 매개ㄱ밧으로 지정한 값의 주소를 매개변수에 복사해서 전달한다.

  • 매개변수를 참조형으로 선언하면 값이 저장된 곳의 원본 주소를 알 수 있기 때문에 값을 읽어 오는 것은 물론 값을 변경하는 것도 가능하다.
  • 메서드의 매개변수 뿐만 아니라 반환타입도 참조형이 될 수 있다.
    - 반환타입이 참조형이라는 것은 반환하는 값의 타입이 "실제값의 주소"이다.

❗️오버로딩 (Overloading)❗️

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

📝 오버로딩 조건

  • 메서드의 이름이 같고, 매개변수의 개수, 타입, 순서가 달라야한다.
  • ‘응답 값’만 다른 것은 오버로딩을 할 수 없다.
  • 접근 제어자만 다른 것도 오버로딩을 할 수 없다.

∴ 오버로딩은 매개변수의 차이로만 구현할 수 있다.

📝 오버로딩 장점

  • 메서드 이름 하나로 상황에 따른 동작을 개별로 정의할 수 있다.
    a. 예를 들면 메세지를 출력할 때는 println() 이 있다
    b. println() 의 매개변수로는 int, double, String, boolean 등 다양하게 넣을 수 있다.
  • 메서드의 이름을 절약할 수 있다
    ➡️ 만약 오버로딩이 안된다면 println()printlnInt(), printlnDouble() 처럼 메서드명이 길어지고 낭비되었을 것이다.
profile
💻🌾시골소녀의 엉망징창 개발 성장일지🌾💻 (2023.05.23 ~)

0개의 댓글

관련 채용 정보