Search

객체 지향 프로그래밍

Java의 객체 지향 프로그래밍

Java 언어는 객체 지향 프로그래밍(OOP)을 지원하는 언어로, 클래스, 객체, 상속, 다형성 등의 개념을 제공합니다. 이번 섹션에서는 Java 언어에서 제공하는 객체 지향 프로그래밍에 대해 자세히 알아보겠습니다.

클래스와 객체

Java 언어에서 클래스는 객체를 생성하기 위한 템플릿으로, 객체의 속성과 메서드를 정의합니다. 객체는 클래스의 인스턴스로, 클래스를 통해 생성됩니다. 객체는 각각 고유한 상태를 가지며, 클래스에서 정의된 메서드를 호출하여 동작합니다.
아래는 Person 클래스와 Person 클래스를 사용하여 생성된 person 객체의 예시입니다.
javaCopy code public class Person { private String name; // 이름 private int age; // 나이 public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } // Person 클래스를 사용하여 객체 생성 Person person = new Person("John", 30); // 객체의 속성과 메서드 사용 String name = person.getName(); // "John" 반환 int age = person.getAge(); // 30 반환
Plain Text
복사

상속과 다형성

Java 언어에서는 클래스 간의 상속을 지원하여, 부모 클래스의 속성과 메서드를 자식 클래스에서 재사용할 수 있습니다. 이를 통해 코드 재사용성과 유지 보수성이 향상됩니다.
아래는 Person 클래스를 상속받은 Student 클래스와 Teacher 클래스의 예시입니다.
javaCopy code public class Student extends Person { private int grade; // 학년 public Student(String name, int age, int grade) { super(name, age); this.grade = grade; } public int getGrade() { return grade; } } public class Teacher extends Person { private String subject; // 담당 과목 public Teacher(String name, int age, String subject) { super(name, age); this.subject = subject; } public String getSubject() { return subject; } }
Plain Text
복사
다형성은 Java 언어에서 자식 클래스의 객체가 부모 클래스의 타입으로 사용될 수 있는 특징을 의미합니다. 이를 통해 다양한 객체를 부모 클래스 타입으로 다룰 수 있습니다.
아래는 Person 클래스 타입의 배열에서 Person, Student, Teacher 객체를 모두 다루는 예시입니다.
javaCopy code Person[] people = new Person[3]; people[0] = new Person("John", 30); people[1] = new Student("Mike", 15, 2); people[2] = new Teacher("Jane", 40, "Math"); for (Person person : people) { System.out.println(person.getName()); }
Plain Text
복사
위 코드에서는 Person 클래스 타입의 배열에 Person, Student, Teacher 객체를 모두 저장할 수 있습니다. 이후 getName 메서드를 호출하여 객체의 이름을 출력합니다.

인터페이스와 추상 클래스

Java 언어에서는 인터페이스와 추상 클래스를 활용하여 클래스 간의 관계를 정의할 수 있습니다. 인터페이스는 클래스가 구현해야 하는 메서드를 정의하는 역할을 하며, 추상 클래스는 하나 이상의 추상 메서드를 포함하는 클래스로, 하위 클래스에서 이를 구현하도록 강제합니다.
아래는 Shape 인터페이스와 Rectangle 클래스, Circle 클래스의 예시입니다.
public interface Shape { public double getArea(); } public class Rectangle implements Shape { private double width; private double height; public Rectangle(double width, double height) { this.width = width; this.height = height; } @Override public double getArea() { return width * height; } } public class Circle implements Shape { private double radius; public Circle(double radius) { this.radius = radius; } @Override public double getArea() { return Math.PI * radius * radius; } }
Java
복사
위 코드에서 Shape 인터페이스는 getArea 메서드를 정의하고 있습니다. Rectangle 클래스와 Circle 클래스는 Shape 인터페이스를 구현하며, 각 객체의 넓이를 반환하는 getArea 메서드를 구현합니다.

예외 처리

Java 언어에서는 예외 처리를 위한 기능을 제공합니다. 예외는 프로그램 실행 중에 발생할 수 있는 예기치 않은 상황을 의미하며, 이를 처리하기 위해 예외 클래스 계층 구조를 가지고 있습니다.
아래는 FileNotFoundException 예외를 처리하는 예시입니다.
try { BufferedReader reader = new BufferedReader(new FileReader("file.txt")); String line = reader.readLine(); while (line != null) { System.out.println(line); line = reader.readLine(); } } catch (FileNotFoundException e) { System.out.println("파일을 찾을 수 없습니다."); } catch (IOException e) { System.out.println("입출력 오류가 발생하였습니다."); } finally { reader.close(); }
Java
복사
위 코드에서는 try-catch 문을 사용하여 FileNotFoundException 예외와 IOException 예외를 처리합니다. finally 블록은 예외 발생 여부와 관계없이 항상 실행됩니다.