내일배움캠프 7기

자바(클래스, 객체, 상속) & Git

suuuki 2024. 10. 17. 22:06

새싹반 수업


클래스(Class)-명사구성

객체 지향 프로그래밍에서 가장 중심적인 개념 중 하나

'객체를 생성하기 위한 틀' or '설계도'

구성: attributes(속성),methods, 생성자

이러한 속성과 행동이 결합된 하나의 독립적인 단위

 

Attribute(속성)

클래스가 표현하는 대상의 특징이나 상태를 나타냄

다르게 표현하면 '무엇을 가지고 있는가?'라는 질문에 답하는 부분

 속성은 클래스 내부의 변수로 표현

이 변수들은 해당 클래스의 인스턴스(객체)마다 각각 다른 값을 가질 수 있음

ex)학생-나이, 성별, 반, 나이, 전공

 

Methods

클래스가 표현하는 대상의 행동이나 기능을 나타냄

'무엇을 할 수 있는가?'라는 질문에 답하는 부분

함수형태로 표현되며, 해당 클래스의 인스턴스(객체)가 수행 할 . 수있는 동작들을 정의

ex)학생이 하는 기능-시험,공부하기, 교실이동

 

생성자

객체를 생성할 때 호출되는 특별한 메서드

객체의 초기화를 담당

생성자의 이름은 클래스와 동일

반환 타입이 없다-> 반환 타입이 없으며, 객체의 초기 상태 지정

ex)학생-이름이 무엇인지

몇학번?

나이는 어떻게 되는지?

전공이 어떻개 되는지

https://devkingdom.tistory.com/226

 

[JAVA] JAVA 메모리 이야기 - Stack 과 Heap

하이.. ! 어느날 회사의 누군가 Java의 메모리가 어떻게 관리되는지에 대해서 물어봤다. 대답이 많이 나오지 않았다... 나름대로 Java를 제일 잘한다고 생각했었고, 자신감도 있던 상태라 충격이 컸

devkingdom.tistory.com

 

객체생성= 힙

객체 내부= 스택


객체

클래스에서 정의된 설계도를 바탕으로 메모리 상에 생성된 것들을 객체라고 한다

하나를 지칭 할 수 있을때 객체

클래스는 객체인가? 애매, 관점에 따라 다르다

ex) 아래에서 테슬라, 제네시스라는 차는 객체/ 테슬라- 변수 car/제네시스- 변수 car2


클래스 구현시 약속

1.모든 변수는 의미를 생각해서 Class attribute에 표현한다(변수명 길어도 ok)

 a.의미 없는 변수명

 int d; //경과 시간
 int h; //하루게 걸리는 작업 시간

 

 b.의미 있는 변수명

int elapsedDays;
int hoursPerDay;

2. 클래스의, 객체의 이름은 명사 | 메소드 이름은 동사로 사용

보통 객체와 메소드로 코드 의미를 파악하는데 위와 같이 사용하면 코드 읽기 쉬어진다

ex)Page,Ordwe | save,post

Page myPage = new Page()
mypage.save();

Order lastOrder = new Order()
lastOrder.save()

상속: 객체지향 프로그래밍의 핵심

1. 상속이란?

클래스(우리가 부르는 '부모 클래스') --기능--> 다른 클래스('자식 클래스')

자식은 부모클래스 코드를 다 쓸 수있다

자식이 부모클래스를 쓰는것처럼 쓸수 있다 자기 코드 걷어내면

2. 코드 재사용성 항상

중복의 제거, 효율의 증가

-> 반복되는 코드 줄이고 개발 시간 단축& 복잡한 구조를 간단하게 만들 수 있음

3. 확장성과 유연성

변화에 유연하게 대응하기

-> 기존 클래스의 기능 그대로 유지하면서 새로운 기능 추가하거나 변경 할 수 있음

4. 계층적 분류

실제 세계와 비슷한 계층

ex) 부모객체-스마트폰(핸드폰에 관한 모든거)/클래스-아이폰, 갤럭시들 

 

5. 다향성

한 타입, 여러형태

->하나의 타입이 여러 형태를 가질 수 있는 능력 기초

   부모 클래스 타입으로 자식 클래스의 객체를 다룰 수 있음

6. 설계 원칙과 상속

개방-폐쇠 원칙의 실현

익스텐즈는 열려있지만. 체인지는 닫혀 있어야

ex)이동 개념 그대로-> 비행하기 ,보행하기 확장은 가능/ 이동 변경은 불가

 

7. 상속

Extends

java에서 클래스 간의 상속은 extends 키워드로 시작

ex) class 자식클래스명 extends 부모클래스명 ->자식 클래스는 부모 클래스의 모든 기능 물려받음

부모명 여러개 쓸 수없다

 

8. 상속의 결과

재사용성과 계층적 구조

->자식 클래스는 부모 클래스의 모든 public과 protected 멤버에 접근 가능

 

9. 생성자와 상속

기본 생성자의 역활

  클래스에는 하나 이상의 생성자가 필요->java는 기본 생성자를 자동으로 제공

  상속시, 자식 클래스 생성자는 부모 클래스의 기본생성자 자동 호출

파라미터 있는 생성자

  파라미터가 있는 생성자를 사용할때는  super키워드를 사용해서 부모 클래스 생성자를 명시적으로 호출

  ->부모 클래스의 특정 생성자를 선택적으로 사용할 수 있음

 



git


 

1.브랜치활용하기

수정은 하고 싶은데 원해 파일은 그대로 두고싶어

복사본 === 브랜치

 

 

브랜치 이동 명령어

-git switch 브랜치 이름 (최근데 만듬)

-git checkout 브랜치 이름(예전부터 쓰던거)-다른 기능들도 섞여있긴 한다

 

 

브랜치 한번에 생성&이동

-git switch -c (크리에이트) 브랜치 이름

-git checkout -b(브랜치) 브랜치 이름

 

main에 합치는 이유

(login)이 최신인데

브랜치 합치는 명령어

git switch 

git merge 합칠브랜치

 

rlt qmfoscl- ghkrdls

 


pull request

사실 git merge 잘 안씀

 

터미널 말고 github 합치는 이유?

깃허브에서 누가 뭘 수정했는지 리뷰할수 있음

 

pull 당겨서 합치는 것(merge)

request 요청하다

->머지 해도 될까요?

 

git push origin 브랜치명

ex) git push origin login

 

깃허브 코드 반영

git pull origin 브랜치

--

2기능 개발 및 코드 저장 =add commit

--

Main 브랜치 === 배포용(사람들이 실제 쓸 수 있는거)

일반적으로 배포용으로 쓰임

---

문제점1

완벽하게 기능 개발해야 merge 가능

해결책1)개발용 브랜치 하나 더 만든다

 

문제2) 그냥 합치면 위험함

변수 이름이 똑같으면 에러, 하지만 각각은 에러가 안난다

팀원이깃 풀 하면 다같이 에러

 

해결책2) 로컬에서 먼저 테스트


실전가이드

참고: 실전 협업 가이드 노선

[1]초기 세팅

 1.

a.퐁더생성

초기 코드 작성

git init,add, commit

2.팀장:dev(ghrdms

3.

<팀원은 git init 할 필요 없다>

4.팀원들을 collaborator로 등록

5.팀원: git clone하기

깃 클론하면dev가 기본으로 설정

[2]기능개발

1.기능 브랜치 생성 및 기능개발

2.pull request 생성

 

충돌 일어나는 경우: 같은줄의 다른 코드

 

3.코드 작성자: 리뷰 요청

 

코멘트 요청하면

5.합치기 전 내 로컬에서 충돌 해결 및 테스트

기능 브랜치에서 git pull origin dev

 

 

[추가 기능 개발]

 

origin dev= 깃허브 데브

dev =내 데브

 

[2]

다음 기능 개발

a기능 브랜치 생성 및 코드 작성

b

c

d

 

롤백=리셋 한다음에 푸쉬

 

브렌치는 같은것만 push 가능