일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 인공신경망
- CNN
- Java
- MERS
- 딥러닝
- 블록체인
- bioinformatics
- 인공지능
- 파이썬
- 바이오파이썬
- 캐글
- 서열정렬
- 바이오인포매틱스
- 시그모이드
- 행렬
- 생명정보학
- Kaggle
- AP
- 자바
- ncbi
- SVM
- 오류역전파
- 이항분포
- COVID
- 결정트리
- 알파폴드
- AP Computer Science A
- 생물정보학
- BLaST
- 인공지능 수학
- Today
- Total
데이터 과학
객체지향 본문
객체지향(Object Oreinted)은 자바언어의 기본적인 프레임입니다.
class는 설계도라고 하면 이를 객체 Object로 만들면 사용 가능한 현실이 됩니다.
하나의 class를 만들어서 여러 개의 객체를 만들어 낼 수 있겠죠.
각각 객체 이름을 지정하면 같은 object가 다른 이름으로 여러 개가 만들어지겠죠.
다음 프로그램 소스를 잘 생각해 보세요.
public class MyClass {
public static void main(String args[]) {
human kim=new human();
human lee=new human();
human choi=new human();
human park=new human();
}
}
class human {
public void eyes() {}
public void face() {}
public void hair() {}
}
이 예제를 보면 human이라는 클래스가 있는데 이를 바탕으로 kim, lee, choi, park이라는 변수를 생성해 냅니다.
단순하게 객체(object)라고 하면 막연한 느낌이 있는데 이를 생성의 의미나 현실적으로 사용가능한 의미로 보면 쉽게 이해할 수 있습니다.
human은 사용할 수 없는 추상적 개념이며 의미적 내용입니다.
현실적으로 human은 존재 할 수 없겠죠. 하지만, human을 바탕으로 만들어진 각 객체들은 kim, lee, choi, park는 생성되어서 사용할 수 있는 대상입니다.
객체를 사용하지 않는 예제를 한번 보면 객체지향을 사용해야 하는 이유가 긍정적으로 생각 될 것입니다.
아래 예제를 보면 객체를 사용하지 않고, 메소드들로만 사용한 방법입니다.
그 안에 사용하는 함수들을 여러번 중복적으로 사용하고 있어서 비효율적입니다.
객체를 활용하면 간단하고 명료하게 프로그래밍 할 수 있습니다.
public class MyClass {
public static void main(String args[]) {
...
}
public kim() {
eyes();
face();
hair();
}
public lee() {
eyes();
face();
hair();
}
public choi() {
eyes();
face();
hair();
}
public park() {
eyes();
face();
hair();
}
}
만약 dog라는 클래스를 인간이라는 객체와 같이 사용한다면 어떻게 될까요?
class dog {
public 짖는다() {...}
}
human 000= new dog();
이렇게 객체를 정의 내리면 무언가 이상하겠죠? 어떤 에러가 나는지 한번 생각해 봅시다.
아래는 일반적으로 JAVA언어의 객체지향에 대한 정의를 내린 부분입니다.
chatGPT에서 가져온 내용인데 일반적으로 설명하는데 처음 배우는 초보자들에게는 이해하기가 어렵습니다.
캡슐화와 재사용성에 대한 정의가 어렵죠.
class는 설계도이며, object는 실행에 대한 대상 정도만 이해하면서 학습 정도를 해 가면서 객체지향 언어의 성향에 대해 공부하면 쉬워질 수도 있겠네요.
--------------- chatGPT에서의 객체지향 정의 -----------
JAVA는 객체지향 프로그래밍(OOP) 언어입니다. 객체지향 프로그래밍은 프로그램을 작성하는 방법 중 하나로, 현실 세계에서 사물이나 개념을 모델링하여 객체(Object)를 생성하고, 이들 객체 간의 상호작용을 통해 프로그램을 구성하는 방법입니다.
JAVA에서 객체는 클래스(Class)로 정의됩니다. 클래스는 객체를 생성하기 위한 설계도(template)로, 객체의 속성(attribute)과 동작(behavior)을 정의합니다. 객체의 속성은 필드(field)로, 동작은 메서드(method)로 구현됩니다.
객체지향 프로그래밍은 상속(Inheritance), 다형성(Polymorphism), 캡슐화(Encapsulation)와 같은 개념을 지원합니다. 상속은 부모 클래스(Parent Class)의 속성과 동작을 자식 클래스(Child Class)에서 재사용할 수 있도록 하는 기능이며, 다형성은 같은 이름의 메서드가 서로 다른 객체에서 다르게 작동하도록 하는 기능입니다. 캡슐화는 객체의 속성과 동작을 외부로부터 보호하여, 객체의 안전성과 유지보수성을 높이는 기능입니다.
JAVA에서 객체지향 프로그래밍을 이용하면, 코드의 재사용성과 유지보수성을 높일 수 있으며, 프로그램의 복잡도를 낮출 수 있습니다. 객체지향 프로그래밍은 대규모 프로젝트의 개발에 적합한 방법론이며, JAVA는 객체지향 프로그래밍을 지원하는 언어로 매우 유용하게 사용됩니다.
아래는 JAVA로 구현된 Account 클래스 예제입니다.
public class Account {
private int accountNumber; // 계좌번호
private String accountHolder; // 예금주
private double balance; // 잔액
// 생성자
public Account(int accountNumber, String accountHolder, double balance) {
this.accountNumber = accountNumber;
this.accountHolder = accountHolder;
this.balance = balance;
}
// 입금 메서드
public void deposit(double amount) {
balance += amount;
}
// 출금 메서드
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
} else {
System.out.println("잔액이 부족합니다.");
}
}
// 잔액 조회 메서드
public double getBalance() {
return balance;
}
}
위 예제에서 Account 클래스는 계좌번호, 예금주, 잔액 속성을 가지고 있습니다. 이 클래스에는 입금, 출금, 잔액 조회 메서드가 있습니다. 이 클래스를 이용해 객체를 생성하면, 해당 객체는 하나의 계좌 정보를 가지게 됩니다.
public static void main(String[] args) {
Account account = new Account(12345, "홍길동", 1000000.0);
account.deposit(500000.0);
account.withdraw(200000.0);
double balance = account.getBalance();
System.out.println("잔액: " + balance);
}
위 예제에서는 Account 클래스를 이용해 계좌 객체를 생성한 후, 입금, 출금, 잔액 조회 메서드를 이용해 계좌 정보를 관리하고 출력합니다.
객체지향 프로그래밍을 이용하면, 이처럼 객체를 생성하여 속성과 동작을 구현할 수 있습니다. 이를 통해 코드의 가독성과 재사용성을 높일 수 있으며, 프로그램의 유지보수성과 확장성을 높일 수 있습니다.
-----------------------------------
한 꼬마, 두 꼬마, 세 꼬마, 네 꼬마, 다섯 꼬마, 여섯 꼬마, 일곱 꼬마, 여덟 꼬마, 아홉 꼬마, 열 꼬마를 자바 언어의 객체지향으로 비유해 보겠습니다.
이 비유에서는 꼬마들을 객체(Object)로, 객체들의 모임을 클래스(Class)로 생각합니다.
꼬마들을 표현하기 위해 "꼬마"라는 클래스를 정의할 수 있습니다. 이 클래스는 꼬마의 특징과 동작을 정의하는 속성과 메서드로 구성됩니다.
한 꼬마, 두 꼬마, 세 꼬마는 모두 "꼬마" 클래스의 인스턴스입니다. 인스턴스는 클래스를 기반으로 생성된 실제 객체를 말하며, 각각의 꼬마는 "꼬마" 클래스로부터 생성된 독립적인 객체입니다.
네 꼬마, 다섯 꼬마, 여섯 꼬마는 같은 "꼬마" 클래스에서 생성된 추가적인 인스턴스입니다. 이들은 같은 클래스를 기반으로 하지만 서로 다른 객체입니다. 각각의 인스턴스는 고유한 속성 값을 가질 수 있으며, 동일한 메서드를 호출하여 다른 동작을 수행할 수도 있습니다.
일곱 꼬마, 여덟 꼬마, 아홉 꼬마는 같은 "꼬마" 클래스에서 또 다른 인스턴스입니다. 이들은 같은 클래스를 기반으로 하며, 각각의 객체는 독립적인 상태를 가지고 있을 수 있습니다. 예를 들어, 일곱 꼬마와 아홉 꼬마는 다른 속성 값을 가질 수 있습니다.
마지막으로, 열 꼬마는 다른 "꼬마" 클래스에서 생성된 인스턴스입니다. 객체지향 프로그래밍에서는 클래스 간의 관계를 표현하기 위해 상속(Inheritance)을 사용합니다. 열 꼬마는 "꼬마" 클래스를 상속받은 새로운 클래스인 "열 꼬마"의 인스턴스로 볼 수 있습니다. 열 꼬마는 "꼬마" 클래스의 속성과 메서드를 상속받으면서, 추가적인 속성과 메서드를 가질 수 있습니다.
이렇게 자바의 객체지향 프로그래밍을 이용하여 꼬마들을 비유하면, 각 꼬마는 클래스의 인스턴스로 표현되며, 클래스는 객체의 특징과 동작을 정의하는 틀이 됩니다. 이를 통해 객체들 간의 상속과 다형성 등의 개념을 활용하여 유연하고 확장 가능한 프로그램을 구축할 수 있습니다.
'프로그래밍 언어론 > JAVA 기초' 카테고리의 다른 글
자바언어에서 ArrayList (0) | 2023.06.06 |
---|---|
this 키워드 (1) | 2023.05.16 |
public, private, 그리고 static (0) | 2023.03.27 |
부동소수점 연산 - BigDecimal (0) | 2023.03.20 |
static 메소드 (0) | 2023.03.19 |