본문 바로가기

Server Programming/BackEnd Project

17일차 - 자바 (5) 객체지향의 이해, 객체와 배열

반응형

1. 객체지향의 요소

  • 클래스
  • 객체
  • 속성, 메서드, 생성자, 패키지

2. 객체지향의 특징

  • 상속
    • 하나의 클래스와 상속관계로 상위클래스의 필드와 메서드를 획득해서 재사용하는 것
  • 다형성
    • 상황에 따라 메서드의 성질을 변화시키는 것
  • 추상화
    • 객체들의 공통 특성을 파악하고, 불필요한 특성을 제거
    • 단순화해 세부정보를 숨기고 기능을 표시한다.
  • 캡슐화
    • 내부 정의를 외부에 보이지 않도록 외부 접근을 차단한다.
      • 높은 응집력과 약한 결합
      • 응집도와 결합도
  • OOP
    • 개발 및 유지 관리를 쉽게 도와준다.
    • 데이터 숨김을 제공한다.
    • 절차보다 데이터에 중점을 두어 프로그램을 객체로 나눈다.

 

3. 클래스와 객체

  • 클래스와 객체의 관계
    • 클래스는 설계도, 설계도를 이용해 만든 제품이 객체
    • 클래스의 구성 요소
      • 필드, 메서드, 생성자, 블럭, 중첩 클래스 및 인터페이스
    • 객체 간에는 서로의 세부정보를 알지는 못하지만, 서로 메시지 전송과 값의 전달로 통신 가능 -> 서로 호출 가능
    • 애플리케이션 아키텍트의 표준을 제공하고, UML을 사용해 개발한다.
    • 포트폴리오에 소스를 기반으로 리버스엔지니어링을 통해 UML 다이어그램을 추가

4. 객체지향 프로그래밍

  • 결합력 : 클래스간 의존성이 강한 결합 대신 의존성을 줄이는 느슨한 결합이 좋다. (루즈 커플링)
  • 응집력 : 객체 내에 존재하는 구성 요소들 사이의 밀접한 정도로 강한 응집이 좋다.
  • 연관 관계 : 연관된 객체간의 관계로 (1 to 1, 1 to many, many to 1, many to many)
package ch05;

public class Account {
    static String bankName; // 클래스 변수
    long accountNO;         // 인스턴스 변수
    String customerName;   //인스턴스 변수

    // 생성자
    Account (){
        System.out.println("셍상자 실행");
    }

    //초기화 블럭으로 생성자보다 우선된다.
    //: 구동하기 위한 환경변수와 같은 설정시에만 존재하고 자주 사용하지 않는다.
    {
        System.out.println("블록입니다");
    }
    // 메서드
    void printInfo(){
        System.out.println ("계좌 클래스");
    }
}

class TestAccount{
    public static void main(String args[]){
        Account acc = new Account();
        acc.printInfo();
    }
}

 


  • 클래스 변수= 정적 변수= 공유 변수
  • 인스턴스 변수
    • 객체 생성할 마다 메모리에 존재
  • 참조 변수
    • 객체의 참조값만 존재하며 객체를 사용하기 위해 존재
    • 힙 영역에 존재

5. 객체지향 설계 원칙

SOLID

  1. SRP (Single Responsibility Principle) : 단일 책임 원칙
    • 모든 클래스는 각각 하나의 책임만 가지고 단일 기능을 수행해야 한다.
  2. OCP (Open Closed Principle) : 개방-폐쇄 원칙
    • 기존 코드의 수정없이 확장을 통해 모듈
  3. LSP (Liscov Substitution Principle) : 리스코프 치환 원칙
    • 자식 클래스는 언제나 부모 클래스를 대체하여 동작하는데 문제가 없어야 한다. 
    • 예시 : JFC 자바 컬렉션 프레임워크
  4. ISP (Interface Segregation Principle) : 인터페이스 분리 원칙
    • 인터페이스를 구체적인 인터페이스로 분할한다.
  5. DIP (Dependency Inversion Principle): 의존성 역전 원칙
    • 의존 관계가 구체적인 클래스에 의존하면 안된다.
    • 추상화된 인터페이스나 추상클래스에 의존해야한다.
    • 고수준 모듈에서 저수준 모듈에 의존해선 안된다.
  • 서비스를 독립적으로 제공하는 MSA 아키텍처 설계 기법
    • TDD 테스트 주도 개발
    • DDD 도메인 주도 개발
      • 인프라 영역과 서비스 영역을 DIP를 적용해 개발

클래스

  1. 클래스의 구성요소
    1. 필드 (변수, 상수)
    2. 메서드
    3. 생성자
    4. 초기화 블록 (생성자 호출 전 필드 초기화)
    5. 내부 클래스
  2. 소프트웨어 패키지
    • 클래스의 묶음
    • 각 클래스 구분을 위한 네임스페이스 역할
    • 패키지를 통해 동일한 클래스명의 충돌을 제거한다.
    • package 상위패키지.하위패키지;
    •  
  3. import문
    • *를 이용하면 해당 패키지의 모든 클래스를 사용 가능하다.
  4. 제어자
    • 클래스, 변수, 메서드 선언부에 사용되는 키워드로 부가적인 의미를 부여한다.
    • 접근제어자와 달리 제어자는 여러개를 사용할 수있다.
    • 종류 : static, final, abstract, native, transient, syncronized, volatile, strictfp
  5. 접근제어자
    • private
      • 클래스 외부에서 접근 불가능하고, 내부에서만 접근 가능할때 사용
      • 상속관계의 하위클래스에서도 접근 불가능
      • 캡슐화 보장에서 사용되고, 클래스의 데이터 필드 보호에 사용된다.
      • 훼손이 안되는 기능의 생성자에 prviate을 선언하면 상속을 제한할 수 있다.

6. 하나의 소스 파일에 여러 클래스 선언

  • 하나의 자바 소스파일에 두 개 이상의 클래스 선언가능
  • public class가 존재할 경우, 소스 파일의 이름은 반드시 public 접근 제어자로 선언한 클래스 이름과 같아야 한다.
  • 하나의 소스파일엔 단 하나의 public class만 존재 가능하다.
  • public class가 없으면 소스 파일 이름은 선언된 클래스 중 하나로 소스파일 이름을 정한다.

1. 용어

  • 클래스 : 객체를 만들 수 있게 작성된 설계도
  • 객체 : 클래스를 이용해 만든 인스턴스를 대표
  • 인스턴스 : 클래스를 이용해 생성한 하나의 객체
  • 인스턴스화 : 클래스를 이용해 객체를 생성

2. 객체 생성과 객체 참조변수

  1. 선언 : 클래스명 참조변수명;
  2. 초기화 : 참조변수명  = new 클래스명();
    • 선언 및 초기화 : 클래스명 참조변수명 = new 클래스명();
     

3. 객체 참조 변수의 초기화

  • new를 이용해 인스턴스 생성시 값을 지정하지 않을 경우 데이터 타입의 기본값으로 초기화
  • 객체를 초기화 = 객체에 데이터를 저장한다.
  • 참조 변수를 통해서만 객체를 초기화 할 수 있다.
  • 생성된 인스턴스의 멤버에 접근시에는 항상 (참조변수명.멤버명)

 

 

 

반응형

'Server Programming > BackEnd Project' 카테고리의 다른 글

18일차 - 자바 (6) 객체와 배열  (0) 2022.12.29
17일차 - TIL  (0) 2022.12.28
16일차 - TIL  (0) 2022.12.27
15일차 - TIL  (0) 2022.12.26
15일차 - 자바 (4) 제어문 (+ repeat(i))  (0) 2022.12.26