반응형
1. oop(object oriented program)의 개념
1) 절차지향 프로그램 VS 객체지향 프로그램 비교
절차지향 언어
- 인간이 만들 수 있는 가장 보편적인 언어들
- 절차지향프로그래밍 언어들
- 기존의 프로그램들은 모두 절차지향언어로 만들었다!
절차지향 프로그램
- 배포하기 어려움
- 프로그램 만드는 데 오래걸림
- 많은 사람들 필요하므로 개발 비용 많이 듬
- 여러 사람들이 같이 만들다보니 유지보수의 효율성도 떨어짐
- 프로그램을 배포할 수 있는 방법이 없다!
- 값들을 처리할 수 있는 명령들은 일반적으로 함수로 받아 값들을 가져다 처리결과를 제공해줌
- 함수는 명령들을 적절히 조합하여 값을 효율적으로 처리하여 원하는 결과를 제공해줄 수 있음
- 이러한 함수들을 호출해서 프로그램을 만듦
- 문제는!!!!! 이 안에 있는 함수들을 배포할 수가 없음ㅜㅜㅜ
- 다른 프로그램의 똑같은 기능을 사용하고 싶다면, 그 소스 자체를 가져다가 복붙할 수 밖에 없지만
소스는 개발자 개인것, 노하우이므로 절대 줄 수 없음 - 즉, 같은 기능을 사용하려면 배포를 해주어야 하는데, 소스를 줄 수 없으니 배포하기 어렵다.
- 프로그램의 흐름이 중요하기 때문에, 하나 수정하면 전체가 다 바뀔 수 있음
- c++이 만들어지면서 class자료형이 만들어지고 , 배포가능하게됨!
- 4세대언어 - 객체지향언어의 등장!!!
- 절차지향 : 부품 하나하나 다 만들어야함
- 객체지향 : 만들어진 부품을 가져다 쓰면 됨!!
객체지향 언어
- 자바언어를 잘 하고 싶다면? 다양한 클래스를 많이 사용해보자!
- 클래스를 사용하는 방법들에 대해 배우기!!
- ex. String클래스 , System클래스, 입출력클래스 사용방법 익히기!!
- 메서드 호출 순서, 클래스 설계 작업을 하는 것은 어려운 작업이다ㅜㅜ
- 클래스 다이어그램 : 시스템의 클래스, 클래스의 속성, 동작 방식, 객체 간 관계를 표시하여 시스템의 구조를 보여주는 정적 구조 다이어그램
- 스퀀스 다이어그램 : 어떠한 순서로 어떤 객체들과 어떻게 상호작용했는지를 표현하는 다이어그램
- 웹프로그래밍에서 중요한 것은?
- 우리는 데이터를 처리하는 메소드만 잘 만들 수 있으면 된다!!!
- 예를들어 학생관리프로그램 만든다? 우리가 할 일) 학생들을 관리하는 클래스 만들기
- 클래스 안에 필요한 속성들, 메소드들은 만들어서 사용해야함
- sort기능? 이런거는 자바가 제공해주는 라이브러에서 메소드를 가져다 쓰면됨
public class StudentManager{
//필드
//생성자
//메서드
//...
}
객체지향 프로그램(Object Oriented Programming)
- 객체지향프로그램(OOP)은 객체를 사용하여 프로그램을 작성하는 것
- 객체들이 서로 관계를 맺고, 메세지를 전달( 메소드 호출 )해서 프로그램을 만드는 것
- 현실 세계에 존재하는 대상들을 모델링(설계)하여 클래스로 작성하는 것
- 객체들의 관계는? 포함관계, 상속관계, ...
- 객체들이 관계를 맺으려면 먼저 객체를 생성해야 하는데, 객체를 생성하기 위한 설계도가 필요하다!!! 그것이 바로 클래스!!!
- 클래스라는 자료형을 만들어 배포할 수 있으니, 프로그램을 빠르게 만들 수 있음
- 클래스가 배포된다는 것은 매우 좋은 장점
- 클래스의 메소드를 제공해주므로, 하나 수정하면 그 메소드만 수정하면됨
- 유지보수가 쉬워짐
- 클래스와 메서드만 적절히 이용할 수 있다면 다른 프로그램 만들 때 어려움 없이 만들기 가능
- 현재 만드는 대다수의 프로그램들이 절차지향 보다 객체지향으로 프로그램 만듦
- 클래스를 만들 수 있어야 → 클래스로 객체를 만들고 → 객체의 요소를 활용하여 프로그램을 만들 수 있음
2. OOP의 특성
- 추상화(Abstract) - 객체모델링(클래스 : 필드,생성자,메서드)
- 캡슐화(Encapsulation) - 시스템필드, 시스템메소드
- 다형성( polymorphism ) - 오버로드에 의한 다형성
- 상속(inheritance)
3. 객체지향 프로그램 만드는 방법
step1 현실 세계에 존재하는 대상들을 모델링(설계)하여 클래스로 작성한다. (class자료형)
step2 클래스로 객체를 생성하여 객체의 요소(대부분 메소드)로 프로그램을 작성한다.
- 요소 중 메서드가 제일 중요..!!
4. 객체 모델링(Object Modeling)이란?
현실 세계에 존재하는 대상을 속성과 행위로 구분하여 설계하는 것
= 설계도를 만들다
= 클래스자료형을 만들다
5. 클래스
- 객체 모델링한 대상을 클래스로 선언 (= 추상화, Abstraction)
- 클래스를 만들어낸다는 개념은 추상적으로 만드는것이다.
- 즉, 어떤 프로그램을 만드느냐에 따라 즉, 관점에 따라 다르게 설계가 가능하다.
- ex. 주차관리프로그램만들기
- 자동차 객체를 만들기 위한 클래스(class) :
- 속성(필드): 차량번호..
- 행위(메소드) : 입차하다, 출차하다..
- 자동차 객체를 만들기 위한 클래스(class) :
- ex. 자동차속도알아내는프로그램만들기
- 자동차 객체를 만들기 위한 클래스(class) :
- 속성(필드): 차량번호, 차량의속도..
- 행위(메소드): 차가 움직이다, 차가 멈추다..
- 자동차 객체를 만들기 위한 클래스(class) :
- 클래스는 배포가 가능하다. (즉, 프로그램의 생산성 및 유지보수의 효율성이 증가한다.)
6. 객체의 상호작용 P213
- 객체 간의 메소드 호출로 이루어진다.
- 나중에 자세히..
7. 객체 간의 관게 P214
- 클래스 다이어그램 : 클래스와 클래스 간 어떤 관계를 맺는지 그려진 그림
- 나중에..
8. 절차지향의 프로그래밍법 VS 객체지향의 프로그래밍법
절차지향
- 제어문을 이용해 프로그래밍 흐름을 제어함
- 프로그램의 전반적인 흐름을 알아야함
- 데이터를 효율적으로 처리할 수 있는 자료구조, 알고리즘 알아야함
객체지향
- 우리가 필요로하는 클래스들을 누군가 배포해놨으니 가져다가 쓰기
- 클래스를 이용해 원하는 프로그램 만드는 것이 객체지향프로그래밍
- 자바스럽다!
9. 배열 요소값을 오름차순 정렬 후 출력하는 프로그램
oop > ArraySortApp.java
package oop;
import java.util.Arrays;
//OOP(Object Oriented Programming) : 객체 지향 프로그램 - 객체를 사용하여 프로그램 작성
// => 현실 세계에 존재하는 대상들을 모델링하여 클래스로 작성하고 클래스로 객체를 생성하여
// 객체의 요소로 프로그램을 작성하는 방법
// => 추상화, 캡슐화, 다형성, 상속성
//객체 모델링(Object Modeling) : 현실 세계에 존재하는 대상을 속성과 행위로 구분하여 설계
// => 객체 모델링한 대상을 클래스(필드와 메소드)로 선언 - 추상화(Abstraction)
// => 클래스 배포 가능 : 프로그램의 생산성 및 유지보수의 효율성 증가
//배열 요소값을 오름차순 정렬되도록 저장하고 출력하는 프로그램 작성
public class ArraySortApp {
public static void main(String[] args) {
//1.
//(절차지향)
//=> 선택정렬 알고리즘 - 오름차순 정렬 이용
/*
int[] array={30,50,10,40,20};
System.out.print("정렬 전 >> ");
for(int num:array) {
System.out.print(num+" ");
}
System.out.println();
//배열 요소값을 선택 정렬 알고리즘을 사용하여 오름차순 정렬되도록 저장
for(int i=0;i<array.length-1;i++) {
for(int j=i+1;j<array.length;j++) {
if(array[i]>array[j]) {
int temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
System.out.print("정렬 후 >> ");
for(int num:array) {
System.out.print(num+" ");
}
System.out.println();
*/
//2.
//(객체지향)
int[] array={30,50,10,40,20};
//Arrays 클래스 : 배열의 요소값을 처리하는 기능을 제공하는 클래스
//Arrays.toString(Object[] array) : 배열을 전달받아 배열의 모든 요소값들을 문자열로
//변환하여 반환하는 메소드
System.out.println("정렬 전 >> "+Arrays.toString(array));
//Arrays.sort(Object[] array) : 배열을 전달받아 배열의 요소값을 오름차순 정렬하여 저장하는 메소드
Arrays.sort(array);
System.out.println("정렬 후 >> "+Arrays.toString(array));
}
}
//정렬 전 >>30 50 10 40 20
//정렬 후 >>30 50 10 40 20
반응형
'java > oop' 카테고리의 다른 글
[oop] 6. this 키워드의 개념 (0) | 2024.04.16 |
---|---|
[oop] 5. 생성자(Constructor)의 개념 (0) | 2024.04.15 |
[oop] 4. 메소드 오버로드(Method Overload) (0) | 2024.04.15 |
[oop] 3. 자동차 클래스로 만든 자동차 출력 프로그램 (0) | 2024.04.14 |
[oop] 2. 클래스와 객체 (feat.접근지정자(Access Modifier) 설정) (0) | 2024.04.14 |