일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- import 키워드
- 화살표연산자
- js메서드
- java스터디
- javatime
- 창의적도구
- java 메서드 오버라이딩
- java 패키지
- 티스토리챌린지
- binraytree
- asyncawait
- ai활용법
- javautil패키지
- this키워드
- JAVA데이터타입
- 생성형AI
- java final 키워드
- 오블완
- 자바스크립트
- javascript
- java 추상 클래스
- java_this
- java 애노테이션
- java반복문
- java
- java objact클래스
- java 제네릭
- java super메소드
- java 이진트리
- gpt활용팁
- Today
- Total
코딩쿠의 코드 연대기
객체지향 프로그래밍 (OOP) 본문
객체지향 프로그래밍(OOP)란?
: 객체지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록이 아닌 여러 개의 독립된 단위, 즉 '객체'들의 모임으로 파악하고자 하는 프로그래밍 패러다임을 사용하는 언어입니다. 객체라는 기본 단위를 조합하여 프로그램을 구성합니다. 각 객체는 데이터와 그 데이터를 처리하는 메서드를 가지고 있으며, 객체끼리 서로 상호작용하면서 프로그램이 동작합니다.
객체?
: 객체지향 프로그래밍(OOP)에서 객체는 세상에 존재하는 사물이나 개념을 추상화하여 프로그램에 표현한 것입니다. 좀 더 쉽게 설명하면, 객체는 레고 블록에 비유할 수 있습니다. 레고 블록은 모양, 색깔, 크기 등의 특징을 가지고 있고 다른 블록과 결합하여 다양한 형태를 만들 수 있는 것처럼 객체도 데이터(속성)와 메서드(행위)를 가지고 있습니다. 객체는 객체지향 프로그램의 핵심 개념이며, 프로그램을 구성하는 기본 단위입니다. 독립적으로 존재할 수 있으며, 다른 객체화 상호 작용하면서 프로그램을 구성합니다.
객체를 지향한다?
: 코드를 객체화하여 독립적으로 존재할 수 있도록 한다.
※ 절차지향 언어 : 명령을 순서대로 처리하는 방식
객체지향 언어의 목적?
1. 현실 세계를 반영한 프로그래밍
- 인간이 세상을 인지하는 방식과 유사하게, 프로그램을 객체들의 집합으로 구성하여 직관적인 소프트웨어 개발을 가능하게 합니다.
- 객체는 현실 세계의 사물, 개념, 또는 존재를 추상화한 것으로, 데이터와 그 데이터를 처리하는 행위를 함께 캡슐화합니다.
- 이러한 방식은 복잡한 시스템을 이해하고 관리하기 쉽게 만들어줍니다.
2. 효율적인 소프트웨어 개발
- 재사용성 증가: 상속과 같은 기능을 통해 기존 코드를 재사용하여 개발 시간을 단축하고 생산성을 향상합니다.
- 유지보수 용이성: 캡슐화를 통해 변경 사항이 프로그램 전체에 미치는 영향을 최소화하여 유지 보수를 용이하게 합니다.
- 확장성 향상: 모듈화 된 구조 덕분에 새로운 기능 추가 및 기존 기능 수정이 용이하며, 시스템 확장에 유연하게 대응할 수 있습니다.
- 신뢰성 향상: 캡슐화를 통해 데이터 무결성을 보장하고, 오류 발생 가능성을 줄여 소프트웨어의 신뢰성을 높입니다.
객체지향 언어는 복잡한 소프트웨어를 효율적으로 개발하고 유지보수하여, 변화에 유연하게 대응할 수 있도록 돕는 것을 목표로 합니다.
객체지향 언어의 주요 특징
캡슐화(Encapsulation) : 데이터와 메서드를 하나의 단위(객체)로 묶어 외부에서의 직접적인 접근을 제한하고, 객체 내부의 데이터를 보호합니다.
>> 사용하는 사람은 기능만 알면 된다. -> 알약(캡슐) 안에 어떤 것이 있는지 알 필요 없다.
상속(Inheritance) : 기존 클래스의 속성과 동작을 물려받아 새로운 클래스를 생성하는 것을 의미합니다. 이를 통해 코드의 재사용성을 높이고 개발 시간을 단축할 수 있습니다.
다형성(Polymorphism) : 같은 이름의 메서드가 여러 클래스에서 다르게 동작하도록 구현할 수 있는 기능입니다.
>>소리 내기 메서드가 있다고 가정할 때, 상속받는 동물에 따라 동작이 달라집니다.
추상화(Abstraction) : 공통적인 특징을 모아 놓은 것 공통적인 특징을 모아 놓은 것
>> 자동차 : 택시, 버스, BMW (바퀴가 있다, 핸들이 있다. 와이퍼가 있다. 액셀을 밟으면 앞으로 나아간다.)
대표적인 객체지향 언어
: Java, Python, C++, C#, JavaScript
메서드 오버로딩(함수의 중복정의)
메소드 오버로딩은 같은 이름의 메서드를 여러 개 정의하는 것을 말합니다.
각 메서드는 매개변수의 개수나 자료형이 달라야 합니다. 즉, 메서드 이름은 같지만, 메서드가 받는 입력값의 종류나 개수가 다르면 다른 메서드로 인식하는 것입니다.
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
}
위 예시에서 add
메서드는 세 가지 버전으로 정의되어 있습니다.
- 첫 번째
add
메소드는 정수형 매개변수 두 개를 받아 정수형 값을 반환합니다. - 두 번째
add
메소드는 실수형 매개변수 두 개를 받아 실수형 값을 반환합니다. - 세 번째
add
메소드는 정수형 매개변수 세 개를 받아 정수형 값을 반환합니다.
이처럼 메서드는 오버로딩을 통해 같은 이름의 메소드로 다양한 유형의 입력값을 처리할 수 있습니다.
메소드 오버로딩의 장점
- 코드의 가독성 향상: 비슷한 기능을 하는 메서드에 대해 이름을 일일이 다르게 지정할 필요 없이, 하나의 이름으로 통합하여 관리할 수 있습니다.
- 유연성 증가: 다양한 유형의 입력값에 대해 같은 이름의 메서드를 사용할 수 있도록 하여 코드의 유연성을 높입니다.
- 코드 재사용성 증가: 메소드 오버로딩을 통해 비슷한 기능을 하는 코드를 중복 작성할 필요성을 줄여 코드의 재사용성을 높입니다.
메소드 오버로딩의 조건
- 메소드 이름이 같아야 합니다.
- 매개변수의 개수 또는 자료형이 달라야 합니다.
- 반환 값만 다른 경우는 오버로딩이 성립되지 않습니다.
주의 사항
- 매개변수의 이름만 다른 경우는 오버로딩으로 인정되지 않습니다.
- 매개변수의 순서만 다른 경우도 오버로딩으로 인정되지 않습니다.
메서드 오버로딩은 객체지향 프로그래밍의 중요한 개념 중 하나이며, 코드의 가독성, 유연성, 재사용성을 높이는 데 도움을 줍니다.
메소드 오버라이딩 (함수의 재정의)
메소드 오버라이딩은 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 말합니다.
즉, 부모 클래스로부터 상속받은 메서드를 자식 클래스에서 자신의 필요에 맞게 다시 구현하는 것입니다.
class Animal {
public void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("멍멍!");
}
}
위 예시에서 Animal
클래스의 sound()
메서드는 "동물이 소리를 냅니다."를 출력합니다. Dog
클래스는 Animal
클래스를 상속받아 sound()
메서드를 오버라이딩하여 "멍멍!"을 출력하도록 재정의했습니다.
메서드 오버라이딩의 조건
- 상속 관계: 부모 클래스와 자식 클래스 사이에 상속 관계가 있어야 합니다.
- 메서드 시그니처: 오버라이딩하려는 메서드의 이름, 매개변수, 반환 타입이 부모 클래스의 메서드와 동일해야 합니다.
- 접근 제한자: 자식 클래스에서 오버라이딩하는 메서드의 접근 제한자는 부모 클래스의 메서드보다 더 좁은 범위로 변경할 수 없습니다. (예: 부모 클래스의 메서드가 `public`이면 자식 클래스에서 `protected` 또는 `private`으로 변경할 수 없습니다.)
- 예외: 자식 클래스에서 오버라이딩하는 메서드는 부모 클래스의 메서드보다 더 많은 수의 예외를 선언할 수 없습니다.
메서드 오버라이딩의 장점
- 다형성 구현: 같은 이름의 메서드가 객체에 따라 다르게 동작하도록 하여 다형성을 구현할 수 있습니다.
- 코드 재사용: 부모 클래스의 메서드를 재사용하면서 자식 클래스의 특성에 맞게 동작을 변경할 수 있습니다.
- 유지보수 용이: 코드의 구조를 명확하게 유지하고 변경 사항을 쉽게 관리할 수 있습니다.
@Override 어노테이션
자바에서는 @Override
어노테이션을 사용하여 메서드 오버라이딩을 명시적으로 표현할 수 있습니다. 이 어노테이션은 컴파일러에게 해당 메서드가 부모 클래스의 메서드를 오버라이딩한다는 것을 알려주어 오타나 오류를 방지하는 데 도움을 줍니다.
메서드 오버라이딩은 객체지향 프로그래밍의 핵심 개념 중 하나이며, 다형성을 구현하고 코드의 재사용성과 유지보수성을 높이는 데 중요한 역할을 합니다.
'코딩스터디 > JAVA스터디' 카테고리의 다른 글
Java) 상속_객체지향 프로그래밍(OOP) (6) | 2024.11.12 |
---|---|
java 자료구조) 이진트리 (BinrayTree) (0) | 2024.11.11 |
Java 자료구조) ArrayList, LinkedList (Stack, Queue) (2) | 2024.11.09 |
Java 클래스 (12) | 2024.11.08 |
Java 조건문, Java 반복문 (6) | 2024.11.03 |