🦁 걸어봐 위엄 라잌어 라이옹/✍🏻 그룹스터디

[대학교멋사🦁/스터디] #2 Git | 추상클래스, 인터페이스 | SOLID 원칙

우주수첩 2023. 4. 28. 06:36
728x90

Q1. Git이란?

  • 소프트웨어를 개발하는 기업의 핵심 자산인 소스코드를 효과적으로 관리할 수 있게 해주는 무료 공개소프트웨어.
  • Git은 버전 관리 시스템(==형상관리도구) 중 하나로 Git Repository라고 불리는 데이터 저상소에 소스 코드 등을 넣어서 이용
  • 개발자간의 협업 및 전체 개발 소스 공유를 위해 프로그램의 버전 관리가 필요 => 이를 관리해주는 것이 GIt
  • 깃허브란?
    • Git 호스팅 사이트 중 하나
    • 내 로컬 저장소와 원격 저장소를 연결하여 파일을 백업하거나 관리

 

 

 


Git의 특징

3.1 Distributed development

  • Git repository를 인터넷 상에서 제공하는 서비스(호스팅 서비스) == Github
  • 분산형 관리 시스템
  • 이러한 변경은 추가개발지점(branch)을 가져와, 로컬 개발 지점과 동일하게 병합(merge)할 수 있다.
  • 저장소는 Git protocol 및 HTTP로 쉽고 효율적(특별한 웹서버 구성없이)으로 접근할 수 있다.

3.2 Strong support for non-linear development

  • 신속하고 편리한 branch 및 merge 지원
  • 비선형(여러갈래) 개발 이력을 시각화 및 탐색 가능한 강력한 도구 제공

3.3 Efficient handling of large projects

  • Git은 매우 빠르고, 대형프로젝트나 이력이 많은 작업에 매우 합리적이다.
  • Git은 대부분의 다른 버전관리시스템보다 빠르게 요청한다.
  • 그리고 일부 작업에서는 더 빠르게 진행한다.
  • 또한, 최근의 정상급 오픈소스 버전관리 시스템보다 장기간의 수정내역을 매우 효율적인 압축방법을 사용한다.

3.4 Cryptographic authentication of history

  • GIt의 이력은  성공한 개발이력의 commit에 의해 개정명으로 저장된다.
  • 일단 그것이 배포되면, 그것을 모르고 예전버전으로 변경하는것은 불가능하다. 또한, 그것들을 암호화 할수 있다.

3.5 Toolkit design

  • UNIX의 전통에 따라, GIT은 C로 작성된 많은 소규모 도구모음이다.
  • 그리고 많은 스크립트들이 기능 보강을 제공한다.
  • Git은 새로운 기발한 작업을 위한 손쉬운 사용과 쉬운 스크립팅을 위한 도구를 제공한다.

 

 


 

Git의 장점

  • 소스코드를 주고 받을 필요 없이, 같은 파일을 여러 명이 동시에 작업하는 병렬 개발이 가능하다
    • Branch를 생성한 뒤, main 프로그램에 merge(병합)
  • Git을 통해 버전 관리를 하면 체계적인 개발이 가능
  • 프로그램이나 패치를 배포하는 과정도 간단 (pull을 통한 업데이트, patch 파일 배포)
  • 분산형 관리 시스템
    • 소스 코드를 여러 개발 PC와 저장소에 분산하여 저장한다.
    • 중앙 서버 장애가 발생해도 로컬 저장소에 커밋 가능, 또한 이러한 로컬 저장소들을 이용하여 중앙 저장소를 복원 가능.
    • 사본을 로컬에서 관리 ⇒ 상대적으로 속도가 빠르다.

 

참고 url : https://goddaehee.tistory.com/91

 

[웹개발 기초] Git 이란?

[웹개발 기초] Git 이란? 안녕하세요. 갓대희 입니다. 이번 포스팅은 [Git 기초] 입니다. :) 1. Git이란? (참고 : https://git-scm.com/book/ko/v2 (공식 Site 한글 매뉴얼)) 1.1 형상 관리 도구(Configuration Management Too

goddaehee.tistory.com



 


 

Q2. 인터페이스와 추상 클래스란?

 

추상클래스란?

 

  • 추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스 == 미완성 설계도
  • 상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없음  : class 앞에 "abstract" 예약어를 사용
  • 선언부만 작성하는 추상메서드를 선언가능
  • 하나의 클래스만 상속 가능

    => 상속을 통해서 하위 클래스에서 추상 메소드를 구현하도록 강제하는 클래스

 


 

인터페이스란?

 

  • 기본 설계도라고 할 수 있습니다.
  • 다른 클래스를 작성하는데 도움을 주는 목적으로 작성
  • 다중상속(구현) 가능

 


추상클래스 VS 인터페이스 차이점

 

1. 사용의도 차이점

  • 추상클래스 =>  IS - A "~이다".
  • 인터페이스 =>  HAS - A "~을 할 수 있는".

 

2. 공통된 기능 사용 여부

 

모든 클래스가 인터페이스를 사용해서 기본 틀을 구성

=> 공통으로 필요한 기능들도 모든 클래스에서 오버라이딩 하여 재정의 해야하는 번거로움 존재

 

각각 다른 추상클래스를 상속하는데 공통된 기능이 필요

=> 인터페이스로 작성해서 구현하는게  수월

 

 

# 정리

추상클래스 사용 시기

  • 같은 조상클래스를 상속하는데 기능까지 완변히 똑같은 기능이 필요한 경우

 

인터페이스 사용 시기

  • 다른 조상클래스를 상속하는데 같은 기능이 필요할 경우 인터페이스 사용

 

 

참고 url : https://myjamong.tistory.com/150

 

[JAVA] 추상클래스 VS 인터페이스 왜 사용할까? 차이점, 예제로 확인 :: 마이자몽

추상클래스 인터페이스 왜... 사용할까? 우리는 추상클래스와 인터페이스에 대해서 알고 있냐고 누가 물어본다면 알고 있다고 대답을 하고있습니다. 그런데 이론적인 내용 말고 정작 "왜 사용하

myjamong.tistory.com


 

 

Q3. SOLID 원칙이란

 

Single responsibility principle(단일 책임 원칙)

  • 한 클래스는 하나의 책임만 가져야 한다.
  • 하나의 역할을 한다.
  • 클래스가 변경되어야 하는 이유가 하나만 있어야 함을 의미합니다.

 

Open/closed principle(개방 폐쇄 원칙)

  • 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장을 위해 열려 있어야 하지만 변경을 위해서는 닫혀 있어야 한다.
  • 개방폐쇄 원칙 기능은 유지보수를 하는 과정이 쉽게 이루어져야한다.
  • 기존의 코드를 변경하지 않고 시스템에 새로운 기능을 추가할 수 있도록 해야 함을 의미합니다.

 

Liskov substitution principle(리스코프 치환 원칙)

  • “프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.” 계약에 의한 설계를 참고하라.
  • 원칙은 수퍼클래스의 객체가 하위 클래스의 객체로 대체될 수 있어야 함을 의미합니다. 즉, 하위 클래스는 부모 클래스 대신 사용될 수 있어야 합니다.
  • 객체가 상속을 받을 때 하위, 상위 객체가 있다. 상위에서 동작하는 것이 하위에서도 동작 할 수 있게 만든다.
  • ex)List<Node> list = new ArrayList<>();

 

Interface segregation principle(인터페이스 분리 원칙)

  • 클라이언트가 사용하지 않는 메서드에 의존하지 않도록 해야 함을 의미합니다.
  • 인터페이스가 특정 기능에 집중된 작고 간결한 것이어야 함을 의미합니다.
  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

 

Dependency inversion principle(의존관계 역전 원칙)

  • 프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.” 의존성 주입은 이 원칙을 따르는 방법 중 하나다.

 

 

 

728x90