Java 프로그래밍 초급(1) - 객체지향 기초
728x90

안녕하세요~ 항상 나아가는 개발자 pink_salt 입니다!

코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다.

Java에 대해서 좀 더 자세히 공부해보겠습니다.

Java의 정말 중요한 개념인 객체지향에 대해서 알아봅시다~ 고고!

이번엔 'Java 프로그래밍 초급' 강의를 듣고 공부한 내용을 정리하여 첫 번째 포스팅을 진행하겠습니다.


SW 개발 방법론

SW는 매우 복잡하고 거대해지고 있습니다.

요구사항대로 동작하는 SW를 정해진 기간/예산 안에 만드는 것이 어렵습니다.

큰 규모의 SW를 잘만들고 관리하기 위해 SW 개발 방법론이 나오게 되었습니다.

  • 요구사항 수집
  • 요구사항 분석
  • 고수준 설계
  • 상세 설계
  • 구현
  • 테스트

의 흐름으로 진행됩니다.

알려진 방법론으로는

  • 구조적 방법론
  • 정보공학 방법론
  • 객체지향 방법론
  • 컴포넌트 기반 방법론
  • 애자일 방법론

등 이 있습니다.

저희는 객체지향 방법론을 기반으로 공부해보겠습니다.


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

  • 데이터와 데이터에 대한 연산을 수행하는 코드를 그룹화한 객체를 중심으로 SW를 설계 개발하는 패러다임입니다.
  • 시스템의 행위보다 시스템에 참여하고 책임을 갖는 객체가 무엇인지에 주목합니다.
  • 다수의 객체가 각자의 역할을 하고, 객체 간에는 메시지를 주고 받으며 전체 시스템을 구성합니다.

 

이러닝 시스템을 설계한다면? (절차지향, 객체지향)

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

 

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

  • 복잡한 SW 시스템이 역할/책임에 따라 모듈화 됩니다.
  • SW 구성 요소 간의 명확한 커뮤니케이션이 가능합니다.
  • SW를 좀 더 쉽게 유지보수 할 수 있습니다.

추상화와 클래스의 개념

 

클래스와 객체

  • 클래스는 Java 프로그램의 기본 단위입니다.
  • Java 프로그램은 1개 이상의 클래스로 구성됩니다.
  • 일반적으로 1개의 클래스는 1개의 Java 파일입니다.
  • Java는 객체지향 언어입니다.
  • 객체는 사물(또는 우리가 상상할 수 있는 개념입니다.
    • 객체는 속성과 행동을 갖고 있습니다.
  • 클래스로 객체를 생성
    • 클래스는 특정 객체를 어떻게 생성할지에 대한 정보를 갖고 있는 설계도입니다.

이 내용은 저번 게시물에서 한 번 짚고 넘어갔습니다.

 

추상화

'추상적'이라는 말은 상상은 가능하지만 확실한 형상이나 개념은 떠올리기 어려운 것을 말합니다.

'구체적'이라는 것과는 반대로 꼭 필요한 정보 외에는 다른 정보가 누락되어 있습니다.

추상화란?

Abstraction이라고 하며

반드시 필요한 것들을 선택하고 불필요한 것들을 버리는 과정입니다.
추상화의 과정 자체가 하나의 클래스를 설계하는 과정이라고 볼 수 있습니다.
-> 특정 객체에 반드시 필요한 속성과 행위를 정의하는 과정을 말합니다.

 

좋은 클래스란?

  • 꼭 필요한 최소한의 속성과 행위만 존재해야합니다.
  • 속성과 행위 모두 특정 객체와 높은 관련성이 있어야합니다.
  • 너무 큰 규모의 클래스는 분할될 필요가 있습니다.

Java 클래스 구현과 객체 생성

 

Java Class

  • 객체를 생성하기 위한 설계도 입니다.
  • 객체 생성을 위한 정보들을 포함하고 있습니다.
    • 객체가 어떤 종류의 행위들을 할 것인지
    • 객체가 어떤 종류의 속성을 가질 것인지

 

Java 클래스 선언 문법

  • class 키워드가 사용됩니다.
  • 클래스 이름을 선언하고 클래스 내부 구현 코드를 중괄호로 묶습니다.
  • 클래스 내부에는 변수들과 메소들이 존재합니다.
    • 클래스의 멤버

클래스 선언 문법

클래스 관련 용어

  • 변수
    • 멤버 변수
    • 인스턴스 변수
  • 메소드
    • 메소드
    • 인스턴스 메소드

 

클래스의 이름

  • 클래스의 이름은 주로 명사로 작명
    • ex) User, Car, Instructor, Student MenuPrompter 등
  • 대문자로 시작하며 단어가 연결될 경우 각 단어의 첫 문자를 대문자로 표시합니다.
    • ex) CoffeeMaker, DatabaseConnectionManager
  • 이름은 생성되는 객체를 가장 잘 표현하는 의미 있는 이름으로 작명해야합니다.

 

객체의 생성

  • 클래스로부터 객체를 생성합니다.
  • new 키워드로 객체를 생성할 수 있습니다. 
    • 클래스명 변수명 = new 클래스명();
  • 객체를 생성하고 그 객체에 대한 참조 정보를 변수에 저장합니다.

예를들어 NewTubeSystem.java를 만들어보겠습니다.

이 코드는 밑의 그림으로 나타낼 수 있습니다.

null은 참조형 변수가 어떠한 값도 가지지 않을 때를 말합니다.

 

객체의 멤버 변수 접근

  • 점 연산자(dot operator)로 객체의 멤버에 접근 가능합니다.
    • 멤버 변수
    • 메소드
  • 문법
    • 객체참조변수명.멤버변수명

객체의 멤버 변수의 값을 저장할 수 있습니다.

 

객체의 멤버 변수에 저장되어 있는 값을 사용하려면 밑에 코드와 같이 사용하면됩니다.

출력 값

 

사용자 객체의 생성

steve와 amy라는 사용자 객체를 만들어서 표현할 수 있습니다.

두 개의 객체는 독립적입니다.

 

클래스를 기반으로 다수의 객체를 만들 수 있고

각 객체별로 여러 멤버 변수를 가질 수 있습니다.

 


다음 게시물에서는 메소드에 대해 더 자세히 공부하고 정리해서 다시 찾아뵙겠습니다!

열심히 나아가는 개발자 이었습니다.

go go!

코드프레소 URL: https://www.codepresso.kr/

 

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

 

www.codepresso.kr

 

728x90
반응형