본문 바로가기
코드프레소 체험단/Java 프로그래밍

[Java 프로그래밍 초급] 객체지향 기초개념 (1)

by 의정부핵꿀밤 2022. 1. 20.
728x90

✨ 이 글은 [ 코드프레소 Java 웹 개발 체험단 활동 ] 내용입니다 ✨

💜 코드프레소 이러닝 강의 수강 중 - Java 프로그래밍 초급 💜

😎 아래의 링크를 통해 프리미엄 IT 교육 서비스, 코드프레소를 확인해보세요 😎

https://www.codepresso.kr/

 

프리미엄 IT 교육 서비스 - 코드프레소

 

www.codepresso.kr


SW 개발 방법론

  • SW는 매우 복잡하고 점점 거대해지고 있다
  • 요구사항 대로 동작하는 SW를 정해진 기간/예산 안에 만드는 것이 어렵다
  • Software Crisis(1968) : SW를 개발하는 족족 실패하던 시기,,,🥶
  • 어떻게 하면 큰 규모의 SW를 잘 만들고 관리할 수 있을까? -> SW 개발 방법론
  • SW 개발은 일련의 과정의 연속들로 이루어진다
    • 요구사항 수집
    • 요구사항 분석
    • 고수준 설계
    • 상세 설계
    • 구현
    • 테스트
  • SW 개발 방법론은 어떻게 수집/분석/설계 할 것인지 등의 각 단계에 대한 정의를 하기도 하고, 전체적인 프로세스 과정을 어떻게 처리할 것인지에 대해 정의하기도 한다
  • SW 개발 방법론의 예시로는 아래와 같은 것들이 있다
    • 구조적 방법론
    • 정보공학 방법론
    • 객체지향 방법론
    • 컴포넌트 기반 방법론
    • 애자일 방법론

이 중에서 객체지향 방법론 볼거임!!

 


객체 지향 프로그래밍 (Object Oriented Programming)

  • 데이터와 데이터에 대한 연산을 수행하는 코드를 그룹화한 객체를 중심으로 SW를 설계 및 개발하는 패러다임
  • 시스템이 어떠한 동작을 하는지 등의 행위보다, 시스템에 참여하고 책임을 갖는 객체가 무엇인지에 주목한다
  • 따라서 OOP 안에서는 다수의 객체가 각자의 역할을 하고, 객체 간에는 메시지를 주고 받으며 전체 시스템을 구성한다
  • 예시 - 카페 운영
    • 행위에 집중 : 직원 A, B, C에게 처리해야 할 일들을 무작위로 시킴
      1. A가 빵굽기
      2. B가 커피 내리기
      3. C가 계산하기
      4. 빵을 다 구운 A는 계산하기
      5. 커피를 다 내린 B는 빵을 굽기 
      6. ...
    • 행위에 집중을 하게 되면 직원들 모두 모든 작업에 대한 이해도가 높아야 한다 (어떤 작업을 처리할지 모르니까!)
    • 책임에 집중 : A는 제빵사, B는 바리스타, C는 캐셔로 지정
      • A, B, C는 각각의 업무를 담당하고, 모든 작업에 대한 이해할 필요 없이 커뮤니케이션 방식만 알면 된다

 

 

설계의 중요성

  • 어떠한 관점에서 업무를 설게하는가에 따라 업무의 효율이 달라질 수 있다
  • SW도 마찬가지로 무엇을 중심에 두고 설계를 하는지가 중요하다 -> 절차 지향 vs 객체 지향

 

 

 

절차 지향 vs 객체 지향

  • 절차 지향 : 시스템의 행위에 집중한다
  • 객체 지향 : 시스템에 참여하는 요소들에 집중한다

 

 

(예시) 이러닝 시스템을 설계한다면?

  1. 절차 지향
    • 이러닝 시스템은 어떤 동작들을 해야 할까? 에 집중!
    • 강의를 들을 수 있다
      • 강의 수강 기능을 하는 함수를 설계하고 구현
    • 질문을 할 수 있다
    • 강의 구매를 할 수 있다
      • 강의 구매 기능을 하는 함수를 설계하고 구현
  2. 객체 지향
    • 이러닝 시스템의 주요 요소들은 무엇일까? 에 집중!
    • 강의를 진행하는 강사 객체가 있다
      • 강사 객체는 어떤 책임을 갖는가?
      • 어떤 속성을 갖고 어떤 기능을 하는가?
    • 강의를 수강하는 수강생 객체가 있다
      • 수강생 객체는 어떤 책임을 갖는가?
      • 어떤 속성을 갖고 어떤 기능을 하는가?
    • 강의와 수강을 관리하는 관리자 객체가 있다
      • 강사 객체와 수강생 객체는 어떤 메시지를 주고 받으며 협력하는가?

 

 

 

객체 지향 프로그래밍의 장점

  • 복잡한 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 등...
  • 이름은 생성되는 객체를 가장 잘 표현하는 의미있는 이름으로 작명해야 한다

 

 

 

객체의 생성

실제 객체 생성 예제 -> User 객체 생성

  • 클래스로부터 객체를 생성한다
  • 객체를 생성하고 그 객체에 대한 참조 정보를 변수에 저장한다
  • 객체를 생성하게 되면 아래와 같은 구조를 갖게 된다

 

 

객체의 멤버 변수 접근

  • 점 연산자(dot operator)로 객체의 멤버에 접근이 가능하다
    • 멤버 변수
    • 메소드
  • 객체의 멤버 변수에 새로운 값을 저장한다
  • 객체의 멤버 변수에 저장되어 있는 값을 사용할 수도 있다
  • 만약 2개의 객체를 생성하면 아래와 같이 독립적으로 생성되며 관리된다

 

 

클래스 정리!

  • 클래스는 객체 생성을 위한 설계도로, 어떤 속성과 행위를 포함할 것인지의 정보를 포함한다
  • 클래스는 class 키워드를 사용하고, 멤버로 변수와 메소드를 포함한다
  • 클래스의 이름은 대문자로 시작하며, 명시 형태의 의미있는 이름으로 작명한다
  • new 키워드로 객체를 생성하여 참조 정보를 변수에 저장한다
  • 객체 참조 변수의 점 연산자를 사용하여 객체의 멤버에 접근이 가능하다

 

 

728x90

댓글