Java 메서드 및 객체 지향 프로그래밍 기초

JavaBeginner
지금 연습하기

소개

이 랩에서는 메서드와 객체 지향 프로그래밍 (OOP) 의 기본 사항을 소개하여 Java 기술을 향상시킬 것입니다. 이러한 개념은 잘 구조화되고, 재사용 가능하며, 효율적인 코드를 작성하는 데 필수적입니다. 다음 내용을 다룰 것입니다.

  1. 코드를 구성하고 재사용성을 용이하게 하기 위한 메서드 생성 및 활용.
  2. 클래스와 객체 뒤에 숨겨진 핵심 아이디어 이해.
  3. 메서드와 속성을 포함하는 기본 클래스 구현.

이 랩이 끝나면 복잡한 문제를 더 작고 관리하기 쉬운 세그먼트로 나누기 위해 메서드를 활용하는 Java 프로그램을 작성할 수 있게 됩니다. 또한, 더 크고 복잡한 애플리케이션을 구축하는 데 중요한 기술인 Java 에서 객체 지향 프로그래밍이 어떻게 작동하는지 이해하게 될 것입니다. 이러한 개념이 처음에는 복잡해 보일 수 있지만, 걱정하지 마세요. 단계별로 접근할 것이며, 랩이 끝날 때쯤에는 이러한 아이디어가 어떻게 더 조직적이고 강력한 코드에 기여하는지 알게 될 것입니다.

시작해 봅시다!

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 88%입니다.학습자들로부터 98%의 긍정적인 리뷰율을 받았습니다.

메서드 이해 및 생성

메서드는 기본적으로 메인 프로그램 내의 작은 프로그램입니다. 코드를 구성하고 가독성을 향상시키며, 동일한 코드를 반복해서 작성할 필요 없이 코드 재사용을 가능하게 합니다. 메서드를 공구 상자의 특수 도구로 생각하십시오. 각 도구는 특정 목적을 위해 설계되었습니다.

  1. 먼저 WebIDE 에서 MethodDemo.java 파일을 엽니다. 다음과 같은 시작 코드가 표시됩니다.

    public class MethodDemo {
        public static void main(String[] args) {
            System.out.println("Welcome to the Method Demo!");
    
            // TODO: Call methods here
        }
    
        // TODO: Add methods here
    }

    이것은 Java 프로그램의 기본 구조입니다. main 메서드는 프로그램 실행이 시작되는 진입점입니다.

  2. 이제 첫 번째 메서드를 만들어 보겠습니다. 간단한 인사를 출력하는 메서드를 만들 것입니다. main 메서드 외부와 뒤, 클래스 레벨에 이 메서드를 추가합니다.

    public class MethodDemo {
        public static void main(String[] args) {
            System.out.println("Welcome to the Method Demo!");
    
            // TODO: Call methods here
        }
    
        // Add the new method here, outside and after the main method
        public static void printGreeting(String name) {
            System.out.println("Hello, " + name + "! Welcome to Java methods.");
        }
    }

    이것이 의미하는 바를 자세히 살펴보겠습니다.

    • public: 이 키워드는 다른 클래스에서 메서드에 접근할 수 있음을 나타냅니다.
    • static: 이 메서드는 클래스의 특정 인스턴스가 아닌 클래스 자체에 속한다는 의미입니다. 이 개념에 대해서는 나중에 더 자세히 살펴보겠습니다. 지금은 객체를 생성하지 않고 사용하려는 메서드에 대한 요구 사항이라고 생각하십시오.
    • void: 이 메서드가 값을 반환하지 않음을 나타냅니다. 인사를 출력하는 작업을 수행하지만 데이터를 반환하지 않습니다.
    • printGreeting: 이것은 메서드에 할당한 이름입니다. 이 이름을 사용하여 메서드를 호출하거나 호출합니다.
    • (String name): 이것은 매개변수 (parameter) 입니다. 메서드가 허용하는 데이터 조각입니다. name이라는 String 을 예상합니다. 이 메서드를 호출할 때 이 매개변수에 대한 값을 제공해야 합니다.
  3. 좋습니다! 이제 메서드를 만들었으니 사용해 보겠습니다. main 메서드 내에서 // TODO: Call methods here 주석을 다음으로 바꿉니다.

    printGreeting("Alice");
    Java method call example

    이 줄은 printGreeting 메서드를 호출하거나 호출하고 "Alice"라는 이름을 인수(argument) 로 전달합니다. 인수는 메서드가 작업을 수행하는 데 필요한 특정 입력을 제공합니다.

  4. 파일을 저장하고 프로그램을 컴파일하고 실행해 보겠습니다. WebIDE 하단의 터미널에서 다음 명령을 입력합니다.

    javac ~/project/MethodDemo.java
    java -cp ~/project MethodDemo

    첫 번째 명령은 Java 파일을 컴파일하여 Java Virtual Machine 이 이해할 수 있는 바이트코드로 변환합니다. 두 번째 명령은 컴파일된 프로그램을 실행합니다. 다음과 유사한 출력이 표시됩니다.

    Welcome to the Method Demo!
    Hello, Alice! Welcome to Java methods.
  5. 훌륭합니다! 방금 첫 번째 Java 메서드를 생성하고 사용했습니다. 다른 이름으로 다시 호출해 보겠습니다. 첫 번째 printGreeting 호출 바로 뒤의 main 메서드에 이 줄을 추가합니다.

    printGreeting("Bob");
  6. 저장, 컴파일 및 프로그램을 다시 실행합니다. 이제 다음이 표시됩니다.

    Welcome to the Method Demo!
    Hello, Alice! Welcome to Java methods.
    Hello, Bob! Welcome to Java methods.

    다른 입력으로 메서드를 재사용할 수 있는 것을 확인하십시오. 이것이 메서드를 사용하는 중요한 이점입니다.

  7. 이제 값을 반환하는 메서드를 만들어 보겠습니다. printGreeting 메서드 아래에 이 메서드를 클래스에 추가합니다.

    public static int sumNumbers(int a, int b) {
        return a + b;
    }

    이 메서드는 두 개의 정수를 받아 더하고 결과를 반환합니다. void 대신 int를 사용하여 이 메서드가 정수 값을 반환함을 나타냅니다.

  8. main 메서드에서 이 새 메서드를 사용해 보겠습니다. main 메서드의 끝에 다음 줄을 추가합니다.

    int result = sumNumbers(5, 7);
    System.out.println("The sum of 5 and 7 is: " + result);

    여기서는 sumNumbers 메서드를 호출하고 값 5 와 7 을 인수로 제공합니다. 메서드의 반환 값은 result라는 변수에 저장됩니다. 반환 값을 저장한 후 콘솔에 값을 출력합니다.

  9. 다시 한 번 저장, 컴파일 및 프로그램을 실행합니다. 이제 추가 출력이 표시됩니다.

    The sum of 5 and 7 is: 12
    Java method output example

축하합니다! 첫 번째 Java 메서드를 생성하고 사용했습니다. 메서드가 어떻게 작업을 수행 (예: 인사 표시) 하고 반환 값 (예: 두 숫자의 합) 을 제공할 수 있는지 확인했습니다. 메서드를 사용하면 코드를 더 작고 재사용 가능한 조각으로 구성하여 프로그램을 더 쉽게 이해하고 유지 관리할 수 있습니다.

클래스와 객체 소개

이제 메서드를 이해했으니, 간단한 클래스를 생성하여 객체 지향 프로그래밍으로 한 걸음 더 나아가 보겠습니다. 객체 지향 프로그래밍에서는 클래스를 청사진으로 사용하여 객체를 생성합니다. 클래스를 쿠키 커터로, 객체를 쿠키 커터로 만든 쿠키로 생각하십시오.

  1. Car.java를 열고 클래스 구축을 시작해 보겠습니다. 먼저 클래스를 정의하고 몇 가지 속성을 추가합니다.

    public class Car {
        // Attributes
        private String make;
        private String model;
        private int year;
    }

    이러한 속성 (필드 또는 프로퍼티라고도 함) 은 모든 Car 객체가 가질 내용을 정의합니다. 각 자동차는 제조사, 모델 및 제조 연도를 갖습니다.

    private 키워드는 이러한 속성이 클래스 자체 내에서만 접근할 수 있음을 나타냅니다. 이것은 캡슐화의 예입니다. 캡슐화는 객체 내 데이터의 무결성을 보호하는 데 도움이 되는 개념입니다.

  2. 이제 클래스에 생성자를 추가해 보겠습니다. 생성자는 새 객체를 생성할 때 자동으로 호출되는 특수 메서드입니다. 주로 객체의 속성을 초기화하는 데 사용됩니다. Car 클래스에 이 생성자를 추가합니다.

    // Constructor
    public Car(String make, String model, int year) {
        this.make = make;
        this.model = model;
        this.year = year;
    }

    이 생성자는 세 개의 매개변수를 받아 속성 값을 설정하는 데 사용합니다. this 키워드는 현재 객체의 속성을 참조하는 데 사용됩니다. 객체의 속성과 생성자에 전달된 매개변수의 이름이 동일할 때 객체의 속성과 생성자에 전달된 매개변수를 구별하는 데 도움이 됩니다.

  3. 다음으로, 자동차에 대한 정보를 표시하는 메서드를 클래스에 추가해 보겠습니다. Car 클래스에 이 메서드를 추가합니다.

    // Method
    public void displayInfo() {
        System.out.println("Car Information:");
        System.out.println("Make: " + make);
        System.out.println("Model: " + model);
        System.out.println("Year: " + year);
    }
    Java code snippet displayInfo method

    이 메서드는 매개변수를 사용하지 않고 값을 반환하지 않습니다. 단순히 자동차의 정보를 콘솔에 출력합니다.

  4. 좋습니다! Car 클래스를 만들었습니다. 이제 CarDemo.java를 열고 다음 코드를 추가해 보겠습니다.

    public class CarDemo {
        public static void main(String[] args) {
            // We'll add code here in the next step
        }
    }

    이것은 데모 프로그램의 기본 구조를 설정합니다.

  5. 이제 몇 개의 Car 객체를 생성하고 사용해 보겠습니다. main 메서드 내에 이 코드를 추가합니다.

    Car myCar = new Car("Toyota", "Corolla", 2022);
    myCar.displayInfo();
    
    Car friendsCar = new Car("Honda", "Civic", 2023);
    friendsCar.displayInfo();

    여기서는 두 개의 Car 객체를 생성하고 있습니다. new 키워드는 새 객체를 생성하는 데 사용되며, 앞서 정의한 생성자를 호출하여 제조사, 모델 및 연도를 설정합니다. 그런 다음 각 자동차 객체에서 displayInfo 메서드를 호출하여 해당 속성을 표시합니다.

  6. 프로그램을 컴파일하고 실행하기 전에 여러 Java 파일 (Car.javaCarDemo.java) 로 작업하고 있다는 점에 유의하는 것이 중요합니다. 종속성이 있는 여러 파일을 컴파일할 때는 함께 컴파일해야 합니다. 또한 CarDemo.javaCar.java가 동일한 디렉토리에 있는지 확인하십시오. 그렇지 않으면 아래와 같이 CarDemo.java의 시작 부분에 Car 클래스를 가져와야 합니다.

    CarDemo.javaCar.java가 다른 디렉토리에 있는 경우 CarDemo.java의 맨 위에 import 문을 추가해야 할 수 있습니다.

    import packagename.Car;  // Replace 'packagename' with the actual package name if applicable

    이제 CarDemo 프로그램을 컴파일하고 실행해 보겠습니다.

    javac ~/project/Car.java ~/project/CarDemo.java
    java -cp ~/project CarDemo

    첫 번째 명령은 두 Java 파일을 함께 컴파일하여 모든 종속성이 해결되었는지 확인합니다. 두 번째 명령은 CarDemo 클래스를 실행합니다.

    다음과 같은 출력이 표시됩니다.

    Car Information:
    Make: Toyota
    Model: Corolla
    Year: 2022
    Car Information:
    Make: Honda
    Model: Civic
    Year: 2023
    Java program output example

축하합니다! 방금 첫 번째 Java 클래스를 생성하고 사용하여 객체를 만들었습니다. 이것이 Java 에서 객체 지향 프로그래밍의 기본입니다. 청사진 (Car 클래스) 을 정의하고 이를 사용하여 특정 인스턴스 (Car 객체) 를 만들었습니다. 각 객체는 고유한 속성 집합을 갖지만 모두 클래스에 의해 정의된 구조와 동작을 공유합니다.

클래스에 메서드 추가하기

이제 클래스와 객체에 대한 기본적인 이해를 갖추었으므로, 유용성을 높이기 위해 더 많은 메서드를 사용하여 Car 클래스를 개선해 보겠습니다. 자동차가 수행할 수 있는 동작과 자동차에 대해 문의하고 싶을 수 있는 속성을 나타내는 메서드를 추가합니다.

  1. Car.java 파일을 엽니다. 자동차가 가속하는 것을 나타내는 메서드를 추가해 보겠습니다. Car 클래스에 이 메서드를 추가합니다.

    public void accelerate() {
        System.out.println("The " + make + " " + model + " is accelerating.");
    }

    이 메서드는 자동차의 속성을 수정하지 않습니다. 단순히 자동차가 가속하는 것에 대한 메시지를 표시합니다.

  2. 이제 제동을 위한 메서드를 추가해 보겠습니다. Car 클래스에 이 메서드를 추가합니다.

    public void brake() {
        System.out.println("The " + make + " " + model + " is braking.");
    }

    이 메서드도 이전 accelerate 메서드와 마찬가지로 자동차의 동작에 대한 메시지를 표시합니다.

  3. 다음으로, 자동차에 대한 정보를 제공하는 메서드를 추가해 보겠습니다. 이 메서드를 추가합니다.

    public String getMakeAndModel() {
        return make + " " + model;
    }

    이 메서드는 제조사와 모델을 단일 문자열로 결합하여 반환합니다. 이 메서드가 정보를 제공하므로 반환 유형이 void가 아닌 String임을 확인하십시오.

  4. 마지막으로, 자동차가 골동품으로 분류되는지 여부를 결정하는 메서드를 추가해 보겠습니다. 많은 곳에서 자동차는 25 년 이상 된 경우 골동품으로 간주됩니다. 이 메서드를 추가합니다.

     public boolean isAntique() {
         int currentYear = java.time.Year.now().getValue();
         return (currentYear - year) > 25;
     }

    이 메서드는 Java 의 내장 Year 클래스를 사용하여 현재 연도를 가져옵니다. 그런 다음 자동차의 연식을 계산하고 25 년 이상 된 경우 true를 반환하고 그렇지 않으면 false를 반환합니다.

  5. 이러한 추가 메서드를 Car 클래스에 추가했으므로, CarDemo.java 파일을 업데이트하여 사용해 보겠습니다. CarDemo.java를 열고 내용을 다음으로 바꿉니다.

    public class CarDemo {
        public static void main(String[] args) {
            Car myCar = new Car("Toyota", "Corolla", 2022);
            Car classicCar = new Car("Ford", "Mustang", 1965);
    
            myCar.displayInfo();
            myCar.accelerate();
            myCar.brake();
    
            System.out.println(classicCar.getMakeAndModel() + " is an antique: " + classicCar.isAntique());
    
            Car[] carArray = {myCar, classicCar};
            for (Car car : carArray) {
                System.out.println(car.getMakeAndModel() + " is an antique: " + car.isAntique());
            }
        }
    }

    이 새로운 main 메서드는 여러 가지 작업을 수행합니다.

    • 현대 자동차와 클래식 자동차의 두 개의 Car 객체를 생성합니다.
    • 새로 추가된 acceleratebrake 메서드를 현대 자동차 객체에서 호출합니다.
    • 클래식 자동차 객체에서 getMakeAndModelisAntique 메서드를 사용합니다.
    • Car 객체 배열을 생성하고 for-each 루프를 사용하여 반복하여 객체 컬렉션을 처리하는 방법을 보여줍니다.
  6. 두 파일을 모두 저장한 다음 CarDemo 프로그램을 컴파일하고 실행합니다.

    javac ~/project/Car.java ~/project/CarDemo.java
    java -cp ~/project CarDemo

    다음과 유사한 출력이 표시됩니다.

    Car Information:
    Make: Toyota
    Model: Corolla
    Year: 2022
    The Toyota Corolla is accelerating.
    The Toyota Corolla is braking.
    Ford Mustang is an antique: true
    Toyota Corolla is an antique: false
    Ford Mustang is an antique: true

축하합니다! Car 클래스를 크게 확장하고 객체를 사용하여 더 복잡한 프로그램을 만들었습니다. 이것은 객체 지향 프로그래밍을 사용하여 코드에서 실제 세계의 개념을 모델링하는 방법을 보여줍니다. 각 자동차 객체는 이제 자체 데이터 (제조사, 모델, 연도) 와 동작 (가속, 제동 등) 을 가지며, 실제 자동차와 매우 유사합니다.

  1. accelerate()brake()와 같이 동작을 나타내는 메서드를 Car 클래스에 추가했습니다. 이러한 메서드는 현재 구현에서 자동차의 상태를 변경하지 않지만, 더 복잡한 프로그램에서는 속도 또는 연료 레벨과 같은 속성을 수정할 수 있습니다.

  2. 두 개의 정보를 단일 문자열로 결합하는 getMakeAndModel()을 추가했습니다. 이것은 객체 지향 프로그래밍에서 일반적인 패턴입니다. 객체 데이터에 편리하게 접근할 수 있는 메서드를 생성합니다.

  3. isAntique() 메서드는 객체 데이터 (자동차의 연도) 를 외부 정보 (현재 연도) 와 결합하여 객체에 대한 새로운 정보를 파생하는 방법을 보여줍니다.

  4. CarDemo 클래스에서 여러 객체를 생성하고 사용하는 방법, 이러한 객체에서 다양한 메서드를 호출하는 방법, 객체 배열을 반복하는 방법을 시연했습니다.

이 예제는 객체 지향 프로그래밍의 강력함을 보여줍니다. 데이터 (제조사, 모델, 연도) 와 동작 (가속, 제동, isAntique) 을 모두 캡슐화하는 Car 클래스를 만들었습니다. 우리가 생성하는 각 Car 객체는 고유한 데이터 집합을 갖지만, 모두 클래스에 의해 정의된 동일한 일련의 동작을 따릅니다.

요약

이 랩에서 우리는 Java 프로그래밍 여정에서 상당한 진전을 이루었습니다. 더 복잡하고 체계적인 Java 프로그램을 작성하기 위한 기초가 되는 기본적이지만 필수적인 개념을 다루었습니다. 우리가 배운 내용을 요약해 보겠습니다.

  1. 메서드 (Methods):

    • 코드를 구조화하고 재사용성을 높이기 위해 메서드를 생성하고 사용했습니다.
    • 메서드가 매개변수를 허용하고 값을 반환하여 복잡한 문제를 더 작고 관리 가능한 작업으로 나눌 수 있는 방법을 살펴보았습니다.
    • 메서드는 코드 중복을 줄이고 프로그램을 더 쉽게 이해하고 유지 관리하는 데 도움이 됩니다.
  2. 클래스 (Classes) 와 객체 (Objects):

    • 객체를 생성하기 위한 청사진으로서 클래스 개념을 소개했습니다.
    • 속성 (제조사, 모델, 연도) 과 메서드 (displayInfo, accelerate, brake 등) 를 갖춘 Car 클래스를 만들었습니다.
    • 객체 (클래스의 인스턴스) 를 인스턴스화하고 해당 객체에서 메서드를 호출하는 방법을 배웠습니다.
  3. 객체 지향 프로그래밍 (Object-Oriented Programming):

    • 객체 지향 프로그래밍이 코드에서 실제 세계의 아이디어를 모델링할 수 있는 방법을 관찰했습니다.
    • Car 클래스 내에서 데이터 (속성) 와 동작 (메서드) 을 캡슐화했습니다.
    • 여러 Car 객체를 생성하여 각 객체가 자체 데이터 집합을 갖지만 클래스에 의해 정의된 동일한 작업을 공유하는 것을 보여주었습니다.
  4. 향상된 클래스 기능:

    • Java 의 내장 날짜 도구를 사용하여 자동차가 골동품인지 여부를 결정하는 메서드를 포함하여 Car 클래스를 더 복잡한 메서드로 확장했습니다.
    • 메서드가 객체 데이터 및 외부 정보와 상호 작용하여 새로운 정보를 생성하는 방법을 살펴보았습니다.
  5. 여러 객체 작업:

    • Car 객체 배열을 생성하여 프로그램에서 객체 컬렉션으로 작업하는 방법을 보여주었습니다.

이러한 개념은 Java 프로그래밍의 기초를 형성하며 더 크고 복잡한 애플리케이션을 만드는 데 필수적입니다. Java 여정을 계속 진행하면서 이러한 개념을 반복적으로 사용하게 될 것입니다.

기억하세요, 프로그래밍을 마스터하려면 꾸준한 연습이 필요합니다. 학습을 확장하기 위한 몇 가지 아이디어가 있습니다.

  1. color 또는 mileage와 같은 더 많은 속성을 Car 클래스에 추가해 보세요.
  2. paint(String newColor) 또는 drive(int miles)와 같이 이러한 속성을 수정하는 메서드를 만듭니다.
  3. 여러 Car 객체를 저장할 수 있는 Garage 클래스를 만듭니다. 차고에 자동차를 추가하고, 자동차를 제거하고, 차고의 모든 자동차를 표시하는 메서드를 추가합니다.
  4. Book 또는 Student와 같은 다른 유형의 객체에 대한 클래스를 생성하는 것을 실험해 보세요.

계속 코딩하고, 계속 탐구하고, 가장 중요한 것은 계속 즐겁게 하세요! 당신은 유능한 Java 프로그래머가 되는 길을 잘 가고 있습니다.