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

2022. 1. 19. 01:19·프로그래밍 언어/Java
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
반응형
저작자표시 (새창열림)

'프로그래밍 언어 > Java' 카테고리의 다른 글

Java 프로그래밍 초급(2) - 객체지향 고급(상속)  (0) 2022.01.21
Java 프로그래밍 초급(2) - 객체지향 메소드  (0) 2022.01.19
Java 프로그래밍 기본 (13) - 반복문  (1) 2022.01.17
Java 프로그래밍 기본 (12) - 배열  (0) 2022.01.17
Java 프로그래밍 기본 (11) - 조건문  (1) 2022.01.17
'프로그래밍 언어/Java' 카테고리의 다른 글
  • Java 프로그래밍 초급(2) - 객체지향 고급(상속)
  • Java 프로그래밍 초급(2) - 객체지향 메소드
  • Java 프로그래밍 기본 (13) - 반복문
  • Java 프로그래밍 기본 (12) - 배열
pink_salt
pink_salt
유익함을 주는 개발자가 되도록 keep going
  • pink_salt
    KeepGoingForever
    pink_salt
  • 전체
    오늘
    어제
    • 분류 전체보기 (117)
      • Project (7)
      • WEB study (3)
        • WEB(Springboot) (10)
        • Git, GitLab (13)
        • Clean code (1)
        • FrontEnd (3)
      • Study (21)
        • Algorithm (19)
        • 면접 준비 (2)
      • Cloud Computing (2)
        • AWS (2)
      • 프로그래밍 언어 (35)
        • Java (29)
        • Python (0)
        • javascript (6)
      • 운영체제 (0)
        • Linux (0)
      • Database (4)
        • MongoDB (8)
        • SQL (8)
      • 애플리케이션 개발 (1)
        • Android (1)
      • AI (1)
        • Deeplearning (1)
        • machinelearning (0)
      • Daily (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩이러닝
    백준
    Java
    mysql
    개념
    BFS
    spring boot
    SWEA
    MongoDB
    코딩강의
    python
    티스토리챌린지
    Database
    Query
    코드프레소
    오블완
    dp
    IT교육
    자바
    빅오표기법
    gitlab
    언어
    git branch
    Git
    무료IT교육
    무료코딩교육
    codepresso
    SW
    객체지향
    대외활동
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
pink_salt
Java 프로그래밍 초급(1) - 객체지향 기초
상단으로

티스토리툴바