[Java] Java에서 제공하는 객체 지향 프로그래밍(OOP) 종류와 기능/예시/장점

    반응형

     

    객체 지향 프로그래밍(OOP) 종류와 기능

     

    메소드 오버로딩: Java는 메소드 오버로딩을 지원하므로 이름은 같지만 매개변수 목록은 다른 여러 메소드를 정의할 수 있습니다. 컴파일러는 전달된 인수의 수, 유형 및 순서에 따라 호출할 메서드를 결정합니다. 메서드 오버로드는 유사한 작업에 동일한 메서드 이름을 사용할 수 있도록 하여 유연성과 코드 가독성을 제공합니다.

    메서드 재정의: Java는 메서드 재정의를 지원하며, 이를 통해 하위 클래스는 해당 슈퍼클래스에 이미 정의된 메서드의 특정 구현을 제공할 수 있습니다. 재정의 메서드는 재정의된 메서드와 동일한 이름, 반환 유형 및 매개 변수를 가져야 합니다. 메서드 재정의는 다형성을 달성하고 하위 클래스에서 동작의 특수화를 촉진하는 데 필수적입니다.

    액세스 수정자: Java는 클래스, 메서드 및 변수의 가시성과 액세스 가능성을 제어하기 위해 세 가지 액세스 수정자(공용, 개인 및 보호)를 제공합니다.

    공개: 공개 액세스 한정자는 다른 클래스의 클래스, 메서드 또는 변수에 대한 무제한 액세스를 허용합니다.


    개인: 개인 액세스 수정자는 동일한 클래스 내에서 액세스를 제한합니다. 전용 멤버는 하위 클래스를 포함하여 클래스 외부에서 액세스할 수 없습니다.


    Protected: 보호된 액세스 한정자는 동일한 패키지 내에서 그리고 하위 클래스가 다른 패키지에 있더라도 액세스를 허용합니다. 액세스 수정자는 캡슐화를 제공하고 데이터 숨기기를 적용하고 코드의 추상화 수준을 제어하는 ​​데 도움이 됩니다.

     

    메소드 재정의 예시
    이러한 기능은 확장 가능하고 유지 관리 가능한 모듈식 Java 코드를 만드는 데 중요한 역할을 합니다. 다음은 이러한 개념을 설명하는 간단한 예입니다.

     

    public class TestA {
        private int sides;
        
        public Shape(int a) {
            this.a = a;
        }
        
        public void draw() {
            System.out.println("testA : " + a );
        }
    }
    
    public class TestB extends TestA {
        public TestB() {
            super(3);
        }
        
        @Override
        public void draw() {
            System.out.println("Hello world");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            TestA testA = new TestA(4);
            testA.draw();  // Output: testA : 4
            
            TestB testB = new TestB();
            testB.draw();  // Output: Hello world
        }
    }

     

    위의 예에서 TestA 클래스는 draw() 메서드를 정의합니다. TestB 클래스는 TestA 를 확장하고 특정 구현으로 draw() 메서드를 재정의합니다. main() 메서드는 TestB 객체를 만들고 TestB 클래스에서 재정의된 메서드를 호출하는 draw() 메서드를 호출하여 다형성을 보여줍니다.

     

    객체 지향 프로그래밍(OOP) 사용의 장점

     

    모듈성 및 재사용성: OOP는 복잡한 시스템을 더 작은 자체 포함 개체로 분해하여 모듈성을 촉진합니다. 각 개체는 특정 엔터티 또는 개념을 나타내며 해당 데이터와 동작을 캡슐화합니다. 이러한 모듈성을 통해 코드 구성, 유지 관리 및 디버깅이 더 쉬워집니다. 또한 개체는 코드의 다른 부분이나 다른 프로젝트에서 재사용할 수 있으므로 중복이 줄어들고 개발 효율성이 향상됩니다.

    캡슐화 및 데이터 숨기기: 캡슐화는 데이터 및 관련 메서드를 단일 단위(개체)로 묶고 다른 개체에서 내부 세부 정보를 숨기는 것과 관련된 OOP의 핵심 원칙입니다. 데이터를 캡슐화하면 메서드를 통해 데이터에 대한 액세스를 제어할 수 있으므로 제어되고 일관된 방식으로 데이터에 액세스하고 수정할 수 있습니다. 캡슐화는 데이터 무결성을 유지하고 코드 가독성을 향상하며 코드 유지 관리 및 진화를 촉진합니다.

    코드 유지 관리 및 확장성: OOP는 코드 구성과 관심사 분리를 강조합니다. 잘 정의된 클래스와 개체를 사용하면 다른 구성 요소에 영향을 주지 않고 코드베이스의 특정 부분을 변경하거나 업데이트할 수 있습니다. 이렇게 하면 코드 유지 관리가 더 쉬워지고 오류 발생 가능성이 줄어듭니다. 또한 OOP는 상속과 다형성을 지원하므로 기존 클래스를 확장하고 속성과 동작을 상속하는 새 클래스를 만들 수 있습니다. 이 확장성은 코드 진화를 단순화하고 코드 재사용을 촉진합니다.

     

    이처럼 메서드 오버로딩, 메서드 재정의 및 액세스 수정자를 활용하여 Java에서 유연한 모듈식 코드를 설계하여 코드 재사용, 캡슐화 및 동작 특수화를 가능하게 합니다.

     

    728x90
    반응형

    댓글