본문 바로가기
공부기록/Java

4월 12일 (2) Java - 객체지향

by project100 2023. 4. 12.

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

기능을 제공하는 명령어들을 묶어서(객체화) 작성하고 다른 명령어 묶음과 연계하여 구현하는 프로그래밍 방식

 

객체 = 정보 + 기능

        = 필드(멤버 변수) + 메소드

객체는 속성과 동작으로 구성, 자바는 이러한 속성과 동작을 각각 필드와 메소드라고 부른다.

 

객체 간의 관계

집합관계

사용관계 

상속관계 

 

객체 지향의 특성

1. 캡슐화(Encapsulation) : 필드와 메소드를 하나로 묶고 실제 구현 내용을 숨김 -> class를 만드는 작업

정보은닉(Informaiton Hiding) : 접근제어자를 사용하여 객체 내부의 정보를 숨김

 

2. 상속(Inheritance) : 부모의 특성을 그대로 물려받고 새로운 것을 추가하는 것 -> 부모 클래스와 자식 클래스 형태로 구현

코드 재 사용성을 높이고, 버전 호환을 제공하며, 유지 보수 수월함을 제공

 

3. 다형성(Polymorphism) : 같은 이름이지만 모양이 다른 것

사용방법은 동일하지만 실행결과가 다르게 나오게 구현하는 것, 대표 이름 개념

 

상속과 맞물려 있음.

메서드 이름이 동일하지만 결과가 다른 부분, 대표 이름의 개념 두가지로 출력 가능

 

4. 추상화(Abstraction) : 개념을 정의하는 것, 대략적인 상태를 정의하고 실체로서 구현하는 방법

예) 동물은 소리를 낸다 - 어떻게 구현하겠는가?

 

 

객체 

캡슐화 - 클래스를 작성하는 것

 

클래스의 종류

1. 정보 클래스

2. 부품 클래스

3. 제어 클래스

 

정보클래스 - DTO(- Data Transfer Object), VO(value Object). 변수를 제공, 기억 공간을 제공

1) 필드(멤버변수)  - 정보 저장을 위한 공간

2) Setter 메소드 - 필드에 값을 저장하기 위한 기능

3) Getter 메소드 - 필드의 값을 가져오기 위한 기능

 

웹 사이트 구축에 필요한 기본적인 사항 - 회원 정보

회원 정보에 필요한 인적 사항을 도출해 보자.

- 이름, id, 비밀번호, 주소, 연락처, 나이 -> private

package dto;

public class MemberDto {
    // 필드 작성(선언) - 초기화 없이 선언
    private String name;
    private String id;
    private String password;
    private String address;
    private String phone;
    private int age;
}

클래스의 멤버변수(필드)의 초기화는 자동으로 처리된다. - 쓰레기값 지우기

0에 해당하는 값으로 자동 초기화

정수형 (byte, short, int, long) - 0

문자형(char) - \u0000 -> 0

실수형(float, double) - 0.0

참조형(String, 그 외 모든 인스턴스 저장 변수) - null

 

setter 메소드 작성 규칙

public void set + 필드명(필드와 같은 타입의 매개변수){

      필드 = 매개변수;

}

 

 

getter 메소드 작성 규칙

public 필드의 타입 get + 필드명() {

      return 필드;

}

 

(메소드 이름은 카멜케이스로 작성, 필드명(변수명)의 첫 글자를 대문자로)

 

접근제어자

정보 은닉 및 객체 보호를 위한 제어자

1) public - 공공의, 공개, 제한 없음, 주로 메소드에 붙임

2) default - 접근제어자를 작성하지 않으면 default, 같은 패키지(내의 클래스)의 다른 객체에서는 접근 가능

3) protected - 같은 패키지, 다른 패키지여도 상속한 객체에서는 접근 가능

4) private - 비공개, 인스턴스 내부에서만 사용

 

접근 범위 

public > protected > default > private

패키지가 경계가 된다. 

 

접근제어자 사용 위치

1) 클래스 앞(보통 private는 붙이지 않는다. 붙이면 설계도를 가지고 올 수 없다. 붙이는 경우는 서브설계도로 사용할 때)

2) 멤버 변수(필드) 앞

3) 메소드 앞

※ 지역 변수 앞에는 붙이지 않는다.

 

대부분의 경우 멤버 변수 앞에는 private, 변수 자체는 보호해야 한다.(필드는 보호)

메소드 앞에는 public 

 

콘솔용 - 웹용 코드의 재사용

 

MVC패턴

Model - dto, servide, dao

View - Scanner, print

Controller - 제어

 

오전에 View + Controller 같이 된 것을 만들어 본 것!

 

작업 프로세스

골격 - 프레임워크 -> Spring 프레임워크

Controller -> View(출력) -> View(입력) -> Controller -> Model -> Controller -> View(출력)-> Controller

 

 

package subpkg;

public class UseClass {
    private int aaa;
    int bbb; // default 접근제어
    public int ccc;
}

 

같은 package에서 aaa는 불러올 수 없다.

 

다른 패키지에서 불러오기 aaa, bbb는 사용불가, public만 사용가능하다.