TIL/Java

TIL 2024-10-11 (Java 문법 종합반)

myoma 2024. 10. 11. 20:56

- 본 강의 내용 중에서 제일 중요하다고 생각하는 것들이 많다고 생각하여 내용이 많음.

1 ) 설계도 ( 클래스 )

  • 객체지향 프로그래밍?
    • 필요한 부품을 만들고 하나씩 조립해서 하나의 완성된 프로그램을 만들 수 있는 기법.
      • '객체지향 프로그래밍'
  • 객체란?
    • 세상에 존재하는 물체를 뜻하며 식별이 가능.
    • 소프트웨어의 객체들끼리 상호작용하는 것.
    • 객체들은 메서드를 통해 데이터를 주고 받을 수 있다.
    • 소프트웨어의 객체 간의 관계?
      • 사용관계, 포함관계, 상속관계
  • 특징.
    • 캡슐화 - 속성(필드)와 행위(메서드)를 하나로 묶어 객체로 만든 후 실제 내부 구현 내용은 외부에서 알 수 없게 감추는 것
      • 외부 객체에선 캡슐화된 내부 구조를 알 수 없기 때문에 노출시켜 준 필드 혹은 메서드를 통해 접근 할 수 있다.
      • 숨기는 이유는 외부 객체에서 해당 필드와 메서드를 잘못 사용하여 객체가 변화하지 않게 하는데 있다.
      • Java에서는 캡슐화된 객체의 필드와 메서드를 노출시킬지 감출지 결정하기 위해 접근 제어자를 사용한다.
    • 상속 - 객체지향 프로그래밍에서는 부모 객체와 자식 객체가 존재. 부모 객체가 가지고 있는 필드와 메서드를 자식 객체들에게 물려주어 사용할 수 있도록 만든다.
      • 상속을 사용하는 이유?
        • 상속 관계로 묶음으로써 객체 간의 구조 파악이 쉬워짐.
        • 필드와 메서드를 변경하는 경우 부모 객체만 수정하면 되기에 일관성을 유지하기 좋다.
        • 자식 객체가 부모 객체의 필드와 메서드를 물려받아 사용하기에 코드 중복이 줄어들고 재사용성 증가.
    • 다형성 - 객체가 연산을 수행할 때 하나의 행위에 대한 각 객체가 가지고 있는 고유한 특성에 따라 다른 여러가지 형태로 재구성되는 것을 의미.
    • 추상화 - 객체에서 공통된 부분들을 모아 상위 개념으로 새롭게 선언하는 것.
      • 공통적이고 중요한 것들을 모아 객체를 모델링.

 


2 ) 클래스 설계

  • 객체를 생성하기 위한 설계도. 구성 멤버는 필드, 생성자, 메서드가 존재
    • 4STEP
      1.  만들려고 하는 설계도를 선언합니다. (클래스 선언)
      2.  객체가 가지고 있어야 할 속성(필드)을 정의합니다.
      3.  객체를 생성하는 방식을 정의합니다. (생성자)
      4. 객체가 가지고 있어야 할 행위(메서드)를 정의합니다.
public class Car {
    // <필드 영역>

    // 1) 고유데이터 영역
    String company; // 자동차 회사

    String model = "Gv80";   //자동차 모델

    String color;   // 자동차 색

    double price;   // 자동차 가격


    // 2) 상태 데이터 영역
    double speed;   // 자동차 속도

    char gear;      // 기어상태 (P, R, N, D)

    boolean lights = true; // 자동차 조명 상태

    // 3) 객체 데이터 영역
    Tire tire = new Tire();
    Door door;
    Handle handle;

    // <생성자 영역>
    //생성자 : 처음 객체가 생성될 때(instance화) 어떤 로직을 수행해야 하며, 어떤 값이 필수로 들어와야 하는지 정의!
    public Car() {
        // logic
        // 기본생성자 : 생략이 가능
        System.out.println("생성자가 호출되었습니다! 객체가 생성됩니다.");
    }

    // <메서드 영역>

    //gasPedal
    //input : kmh
    //output : speed
    double gasPedal(double kmh, char type) {
        changeGear(type); // 가속도 패달을 밟으면 자동으로 기어가 변한다.
        speed = kmh;
        return speed;
    }
    //brakePedal
    //input : x
    //output : speed 0
    double brakePedal() {
        speed = 0;
        return speed;
    }
    //changeGear
    //input : gear(char)
    //output :gear
    char changeGear(char type) {
        gear = type;
        return gear;
    }
    //onOffLight
    //input : x
    //output : light(boolean)
    boolean onOffLights() {
        lights = !lights;
        return lights;
    }
    //horn
    //input : x
    //output :
    void horn() {
        System.out.println("빵빵");
    }

    //자동차의 속도 .. 가변길이 메서드
    void carSpeeds(double ... speeds) {
        for(double v : speeds) {
            System.out.println("v = " + v);
        }
    }
}

 

 


 

3 ) 객체 생성과 참조형 변수

  • 객체 생성
new Car(); // Car클래스 객체 생성
  • 참조형 변수
Car car1 = new Car(); // Car클래스의 객체인 car1 인스턴스 생성
Car car2 = new Car(); // Car클래스의 객체인 car2 인스턴스 생성
  • new 연산자를 통해서 객체가 생성되면 해당 인스턴스의 주소가 반환되기 떄문에 해당 클래스의 참조형 변수를 사용하여 받을 수 있다.
  • 객체 배열 - 참조형 변수와 동일하게 취급되기 때문에 배열 또는 컬렉션에도 저장하여 관리할 수 있다.

 

 


4 ) 객체의 속성 : 필드

  • 필드란?
    • 객체의 데이터를 저장하는 역할.
  • 필드의 초기값과 초기화
    • 우리가 정의하여 선언한 클래스의 필드들은 기본적으로 초기값을 제공하지 않을 경우 객체가 생성될 때 자동으로 기본값.
    • 초기값 제공 방법 '필드 타입 필드 명 = 값;' 으로 직접 초기화.
String model = "GV80";

 

  • 필드 사용 - 필드의 값을 변경하거나 읽는 것
    • 외부접근 - 내부 필드에 접근하는 방법 도트(.)연산자를 사용.
    • 내부접근 - 도트 연산자를 사용하여 외부에서 객체 내부에 접근할 수 있을 뿐만 아니라 내부 메서드에서도 내부 필드에 접근 가능.

 

 


5 ) 객체의 행위 : 메서드

  • 메서드는 객체의 행위를 뜻하여 객체 간의 협력을 위해 사용
    • 메서드의 행위를 정의하는 방법은 블록 {} 내부에 실행할 행위를 정의하면 된다.
  • 메서드 선언
리턴타입 메서드명(매개변수, ...) {
	실행할 코드 작성
}
  • 주의할 점은 리턴 타입을 선언하여 반환할 값이 있다면 반드시 retunr 문으로 해당하는 리턴 타입의 반환값을 지정.
  • 반환할 값이 없을 때 리턴 타입을 'void'로 지정.
    • 반환값이 없을 땐 return 문을 반드시 지정할 필요 없음.

 

  • 매개변수 - 메서드를 호출할 때 메서드로 전달하려는 값을 받기 위해 사용되는 변수.
    • 전달하려는 값이 없으면 생략가능.
    • 가변 길이의 매개 변수도 선언 가능
void carSpeeds(double ... speeds) {
	for(double v : speeds) {
    	System.our.println("v = " + v );
    {
}
  • ... 을 사용하면 매개값을 , 로 구분하여 개수 상관없이 전달 가능.