728x90
✨ 이 글은 [ 코드프레소 Java 웹 개발 체험단 활동 ] 내용입니다 ✨
💜 코드프레소 이러닝 강의 수강 중 - Java 프로그래밍 초급 💜
😎 아래의 링크를 통해 프리미엄 IT 교육 서비스, 코드프레소를 확인해보세요 😎
프리미엄 IT 교육 서비스 - 코드프레소
www.codepresso.kr
SW 개발 방법론
- SW는 매우 복잡하고 점점 거대해지고 있다
- 요구사항 대로 동작하는 SW를 정해진 기간/예산 안에 만드는 것이 어렵다
- Software Crisis(1968) : SW를 개발하는 족족 실패하던 시기,,,🥶
- 어떻게 하면 큰 규모의 SW를 잘 만들고 관리할 수 있을까? -> SW 개발 방법론
- SW 개발은 일련의 과정의 연속들로 이루어진다
- 요구사항 수집
- 요구사항 분석
- 고수준 설계
- 상세 설계
- 구현
- 테스트
- SW 개발 방법론은 어떻게 수집/분석/설계 할 것인지 등의 각 단계에 대한 정의를 하기도 하고, 전체적인 프로세스 과정을 어떻게 처리할 것인지에 대해 정의하기도 한다
- SW 개발 방법론의 예시로는 아래와 같은 것들이 있다
- 구조적 방법론
- 정보공학 방법론
- 객체지향 방법론
- 컴포넌트 기반 방법론
- 애자일 방법론
이 중에서 객체지향 방법론 볼거임!!
객체 지향 프로그래밍 (Object Oriented Programming)
- 데이터와 데이터에 대한 연산을 수행하는 코드를 그룹화한 객체를 중심으로 SW를 설계 및 개발하는 패러다임
- 시스템이 어떠한 동작을 하는지 등의 행위보다, 시스템에 참여하고 책임을 갖는 객체가 무엇인지에 주목한다
- 따라서 OOP 안에서는 다수의 객체가 각자의 역할을 하고, 객체 간에는 메시지를 주고 받으며 전체 시스템을 구성한다
- 예시 - 카페 운영
- 행위에 집중 : 직원 A, B, C에게 처리해야 할 일들을 무작위로 시킴
- A가 빵굽기
- B가 커피 내리기
- C가 계산하기
- 빵을 다 구운 A는 계산하기
- 커피를 다 내린 B는 빵을 굽기
- ...
- 행위에 집중을 하게 되면 직원들 모두 모든 작업에 대한 이해도가 높아야 한다 (어떤 작업을 처리할지 모르니까!)
- 책임에 집중 : A는 제빵사, B는 바리스타, C는 캐셔로 지정
- A, B, C는 각각의 업무를 담당하고, 모든 작업에 대한 이해할 필요 없이 커뮤니케이션 방식만 알면 된다
- 행위에 집중 : 직원 A, B, C에게 처리해야 할 일들을 무작위로 시킴
설계의 중요성
- 어떠한 관점에서 업무를 설게하는가에 따라 업무의 효율이 달라질 수 있다
- SW도 마찬가지로 무엇을 중심에 두고 설계를 하는지가 중요하다 -> 절차 지향 vs 객체 지향
절차 지향 vs 객체 지향
- 절차 지향 : 시스템의 행위에 집중한다
- 객체 지향 : 시스템에 참여하는 요소들에 집중한다
(예시) 이러닝 시스템을 설계한다면?
- 절차 지향
- 이러닝 시스템은 어떤 동작들을 해야 할까? 에 집중!
- 강의를 들을 수 있다
- 강의 수강 기능을 하는 함수를 설계하고 구현
- 질문을 할 수 있다
- 강의 구매를 할 수 있다
- 강의 구매 기능을 하는 함수를 설계하고 구현
- 객체 지향
- 이러닝 시스템의 주요 요소들은 무엇일까? 에 집중!
- 강의를 진행하는 강사 객체가 있다
- 강사 객체는 어떤 책임을 갖는가?
- 어떤 속성을 갖고 어떤 기능을 하는가?
- 강의를 수강하는 수강생 객체가 있다
- 수강생 객체는 어떤 책임을 갖는가?
- 어떤 속성을 갖고 어떤 기능을 하는가?
- 강의와 수강을 관리하는 관리자 객체가 있다
- 강사 객체와 수강생 객체는 어떤 메시지를 주고 받으며 협력하는가?
객체 지향 프로그래밍의 장점
- 복잡한 SW 시스템이 역할/책임에 따라 모듈화 될 수 있다
- SW 구성 요소 간의 더 명확한 커뮤니케이션이 가능하다
- 결과적으로 SW를 좀 더 쉽게 유지보수 할 수 있다
[Reminder]
클래스
- 클래스는 Java 프로그램의 기본 단위이다
- Java 프로그램은 한 개 이상의 클래스로 구성된다
- 일반적으로 1개의 클래스는 1개의 Java 파일과 매칭이 된다
클래스와 객체
- Java는 객체지향(Object Oriented) 언어이다
- 객체는 사물(또는 우리가 상상할 수 있는 개념)이다
- 자동차, 프린터, 컴퓨터, 자전거 ...
- 옵션, 강사, 학생, 블로그 글 ...
- 클래스로 객체를 생성한다
- 클래스는 특정 객체를 어떻게 생성할지에 대한 정보를 갖고 있는 설계도이다
- 객체는 속성과 행동을 갖고 있다
- 클래스는 객체를 만들기 위한 틀 또는 템플릿
-
구체적(Concrete) vs 추상적(Abstraction)
- 구체적인 것을 보다 추상적으로 표현하는 것
- 추상적인 것은 구체적인 정보는 없애고, 반드시 필요한 정보들만 남긴 것이다
- 구체적
- 눈에 보이고 만질 수 있는 사물, 사람
- 많은 정보를 포함하고 있다
- 추상적
- 상상은 가능하지만, 확실한 형상이나 개념을 떠올리기 어렵다
- 꼭 필요한 정보 외에는 다른 정보가 누락되어 있다
추상화(Abstraction)
- 반드시 필요한 것들을 선택하고, 불필요한 것들을 버리는 과정
- 추상화의 과정 자체가 하나의 클래스를 설계하는 과정이다
- 즉, 특정 객체에 반드시 필요한 속성과 행위를 정의하는 과정이다
좋은 클래스는?
- 꼭 필요한 최소한의 속성과 행위만 존재한다
- 속성과 행위 모두 특정 객체와 높은 관련성이 있어야 한다
- ex) 강사 객체에 "청소하기" 행위는 관련성이 약하다!
- 너무 큰 규모의 클래스는 분할될 필요가 있다
Java 클래스(Class)
- 객체(Object)를 생성하기 위한 설계도(blueprint)
- 객체 생성을 위한 정보들을 포함하고 있음
- 객체가 어떤 종류의 속성들을 가질 것인지
- 객체가 어떤 종류의 행위들을 할 것인지
Java 클래스 선언 문법
- class 키워드가 사용된다
- 클래스 이름을 선언하고 클래스 내부 구현 코드를 중괄호로 묶는다
- 클래스 내부에는 변수들과 메소드들이 존재한다 -> 클래스의 멤버
Java 클래스 관련 용어
- 변수
- 멤버 변수 -> 보통 이렇게 부름
- 인스턴스 변수
- 메소드
- 메소드 -> 보통 이렇게 부름
- 인스턴스 메소드
클래스의 이름
- 클래스의 이름은 주로 명사로 짓는다
- 대문자로 시작하며, 단어가 연결될 경우 각 단어의 첫 문자를 대문자로 표시한다
- CoffeMaker, DatabaseConnectionManager 등...
- 이름은 생성되는 객체를 가장 잘 표현하는 의미있는 이름으로 작명해야 한다
객체의 생성
- 클래스로부터 객체를 생성한다
- 객체를 생성하고 그 객체에 대한 참조 정보를 변수에 저장한다
- 객체를 생성하게 되면 아래와 같은 구조를 갖게 된다
객체의 멤버 변수 접근
- 점 연산자(dot operator)로 객체의 멤버에 접근이 가능하다
- 멤버 변수
- 메소드
- 객체의 멤버 변수에 새로운 값을 저장한다
- 객체의 멤버 변수에 저장되어 있는 값을 사용할 수도 있다
- 만약 2개의 객체를 생성하면 아래와 같이 독립적으로 생성되며 관리된다
클래스 정리!
- 클래스는 객체 생성을 위한 설계도로, 어떤 속성과 행위를 포함할 것인지의 정보를 포함한다
- 클래스는 class 키워드를 사용하고, 멤버로 변수와 메소드를 포함한다
- 클래스의 이름은 대문자로 시작하며, 명시 형태의 의미있는 이름으로 작명한다
- new 키워드로 객체를 생성하여 참조 정보를 변수에 저장한다
- 객체 참조 변수의 점 연산자를 사용하여 객체의 멤버에 접근이 가능하다
728x90
'코드프레소 체험단 > Java 프로그래밍' 카테고리의 다른 글
[Java 프로그래밍 초급] 객체지향 기초개념 (3) (0) | 2022.01.20 |
---|---|
[Java 프로그래밍 초급] 객체지향 기초개념 (2) (0) | 2022.01.20 |
[처음 시작하는 Java 프로그래밍] 반복문 (0) | 2022.01.14 |
[처음 시작하는 Java 프로그래밍] 배열 (0) | 2022.01.14 |
[처음 시작하는 Java 프로그래밍] 조건문 (0) | 2022.01.14 |
댓글