요즘 IT 회사들은 주로 Git을 많이 사용하지만, 형상관리 툴로 SVN도 많이 사용합니다. 물론 SI업체들은 SVN을 대체로 많이 사용합니다.

그래서 오늘은 SVN(Subversion)에 관해서 기본적인 개념을 정리하도록 하겠습니다!
(아래 SVN 개념들은 아파치에서 무료로 제공하는 SVN Book을 참고하여 정리했습니다)

 

 

1. SVN 개념

 

1.1 Repository

Repository는 저장소 입니다.  SVN은 중앙관리 방식으로 Repository를 생성하면, Client가 Repository에 연결해서 내려받아 Read/Write하는 방식입니다. (그림 1 참고)

 

 

1.2 충돌방지 LOCK

SVN의 특징 중 하나는 Lock 시스템입니다. 현재 작업중인 파일들은 다른사람이 사용하지 못하게 Lock을 걸어두어 
여러 사람들이 동시에 수정하여 발생하는 문제를 방지할 수 있습니다.

그림 2. SVN Lock System

 

1.3 Basic Work Cycle

그림 3을 참고하여 SVN의 기본 Cycle을 이해한다면 SVN 사용의 이해는 크게 무리가 없을 것 입니다.

 

그림 3. SVN basic Work Cycle

 

1.4 SVN 관리Tool

SVN은 관리 툴은 VisualSVNServer.msc, VisualSVNShell.exe을 통해 관리가 가능합니다.
SVN Server 관리 툴은 VisualSVNServer.msc 이며 https://www.visualsvn.com/server/download/ 에서 다운 받을 수 있습니다.

사진 1. VisualSVNServer.msc

 

물론 Linux의 경우 쉘로 관리하며, Windows에서도 VisualSVNShell.exe을 통해 쉘로 관리할 수 있습니다.
VisualSVNShell.exe은 VisualSVNServer를 설치하면 폴더내에 같이 설치 됩니다.

사진 2. VisualSVNShell.exe

 

SVN을 바로 사용하기 위해서 알아야 할 가장 기본적인 내용과 사용 Tool에 관해 정리했습니다.
용어 정리와 Command들은 나중에 정리하겠습니다!!

'IT > SVN(Subversion)' 카테고리의 다른 글

SVN Shell 주요 명령어, Git 명령어 비교  (0) 2019.09.26
SVN Repository 만들기  (0) 2019.09.26

기존 프로젝트를 기반으로 새로운 프로젝트를 덧붙여서 진행하려고 하다보니

git tag를 그어야 할 일이 생겼네요.

 

- 급할때 보기용 요약정리 -

tag 작성 : git tag -a {tag id} -m "{tag message}"
tag 확인 : git tag
tag push : git push {Remote Address} {tag id}
commit log에서 tag 확인 : git log --decorate
tag 삭제 : git tag -d {tag id} OR git tag --delete {tag id}

 

 

 

그래서 오늘은 속성 git tag 긋기!

tag를 긋는 이유는 아주아주 간단 합니다.

어느 버전인지를 알아보기 위함이죠

현재 어느 Commit까지 Release가 되었는지, 아니면 어느 시점부터 프로젝트가 다른 프로젝트와 Merge가 되었는지 등을 확인하기 위한 용도 입니다.

다음 아래 사진과 같은 commit log에 git tag를 작성하는 방법을 알아보겠습니다.

그림 1. git tag 긋기 01

 

 

1. tag 작성하기

위 사진에 화살표로 표기 된 commit에 새로운 Project의 시작점이라고 표기하기 위해서 "ERP_HR/Salary_Management_ver.1.0.1"를 그어보겠습니다

$git tag -a {tag id 입력} -m "{사용할 메세지 입력}"
예제 사용 명령어 :  git tag -a ERP_HR/Salary_Management_ver.1.0.1 -m "ERP_HR/Salary_Management_ver.1.0.1"

그림 2. git tag 작성하기

 

 

 

2. tag 확인하기

이상이 없이 태그가 작성되면 작성되었는지 확인 합니다.
확인 명령어는 : git tag

그림 3. git tag 확인하기

 

3. 작성한 tag commit log에서 확인

이제 다시 commit log를 보면 아래 사진과 같이 tag가 표기 됩니다.
참고로 tag log까지 같이 보려면 $git log --decorate 이렇게 옵션을 줘야 표기 됩니다.

그림 4. commit log에서 작성한 tag 보기

 

 

 

4. tag push 하기

현재는 저의 작업 폴더에만 tag가 작성된것 이기 때문에, git tag를 작성해도 Remote로 Push 해주어야 합니다.

명령어는 일반 push와 동일합니다만, 작성한 tag만 push할 경우
$ git push {remote name} {tag id}
로 작성 합니다.

위 예제의 경우
$git  push origin ERP_HR/Salary_Management_ver.1.0.1
라고 입력 하면 되겠져?

그림 5. tag push

이렇게 뜨면 완료!

 

tag의 장점은 checkout할 경우 tag id로도 가능하다는 것 입니다.
그래서 체크 포인트를 잘 작성하면 트러블 이슈 관리에 도움이 되겠죠!

 

 

'IT > Git' 카테고리의 다른 글

reset, revert, stash  (0) 2020.05.03
Git submodule?  (0) 2020.03.07
Git 개념 (2) - pull / commit / push  (0) 2019.05.22
기존에 있던 프로젝트 Git으로 관리하기  (0) 2019.05.20
Git 개념 - init, clone  (1) 2019.05.20

예제는 지난시간에 받아온 프로젝트 project를 이용하겠습니다.

 

1. git push / git pull 

git push는 내 local에서 변경된 사항을 Remote Repository에 적용하는 것 입니다.

git pull은 remote Repository와 버전을 맞추는 것 입니다.

 

아래 그림과 같이 A / B가 같은 프로젝트를 한다고 가정하겠습니다.

그림 1. Git 형상관리 (1)

 

각자의 컴퓨터에 프로젝트를 Clone 해서 현재는 버전이 동일한 상태 입니다.

그리고 A가 코드를 수정한 뒤 Remote로 Push를 하게되면? 아래 사진과 같이 됩니다.

그림 2. Git 형상관리 (2)

 

 

A와 B는 서로 다른 버전을 갖게 됩니다. 이상태에서 B가 코드를 수정한 후 push하면?
Remote의 버전과 B의 버전이 맞지 않기 때문에 에러가 발생하게 됩니다.

그림 3. Git 형상관리 (3)

 

그러면 어떡해야 할까여?

이때 B는 git pull을 받아야 합니다.
충돌이 발생하지 않는 이상 B가 git pull을 받으면 현재 코드와 자동으로 Merge가 됩니다.
이후에 다시 Push를 하면 정상적으로 반영이 됩니다.

그림 4. Git 형상관리 (4)

 

2. git commit

commit은 무엇인가? commit은 Push하기 전 내 local에서 Remote로 push할 내용들을 저장하는 것 입니다.

A가 개발한 a기능과 b기능이 있다고 가정합니다.
1) 그러면, a기능 개발 후 commit , b기능 개발 후 commit 이런식으로 나누어 줍니다.
2) 이후 push를 하게 되면 commit한 내용들이 push가 되는 것 입니다.

그림 5. git commit & push

 

git pull, commit, push의 개념을 이해하려면 먼저 아래 상태표를 알아야 합니다.

★○@!! 

그림 6. file life cycle

그림 6의 출처는 ->Git git-scm.com/book/ko/v2 입니다. 

이 내용은 https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%88%98%EC%A0%95%ED%95%98%EA%B3%A0-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0 여기보다 더 잘 설명할수가 없어서 링크로 올립니다.

- 읽어보면 더이상의 설명은 필요없을듯 해서 생략 -

 

'IT > Git' 카테고리의 다른 글

reset, revert, stash  (0) 2020.05.03
Git submodule?  (0) 2020.03.07
Git - tag 긋기  (0) 2019.06.21
기존에 있던 프로젝트 Git으로 관리하기  (0) 2019.05.20
Git 개념 - init, clone  (1) 2019.05.20

기존에 있던 프로젝트를 Git으로 관리하고 싶은 상황이 발생!!

1) 개인 노트북으로 프로그래머스 코딩테스트 문제를 Eclipse를 이용해 풀고있었다.
2) 그러던 중 데스크톱과 연동을 하면 좋을 것 같아서 Git으로 관리하기로 결정
3) 이미 사용하던 프로젝트 Repository와 어떻게 연동할까!?

 

- 순서 요약 정리 (git Bash 사용함)

1. 먼저 내 github 홈페이지에 새로운 Repository를 만든다.
2. 이것을 git Bash를 켜고 내가 관리할 폴더에 Clone 한다.
3. 여기에 기존 프로젝트중 필요한 것들을 clone한 폴더로 복사한다. 
4. 복사 후 폴더로 들어간 다음 git status로 상태를 보면 다음과 같이 방금 변경 된 내용들이 출력 될 것이다.
5. 이것을 모두 add 한다. 
6. 그 다음 commit 이후 push 하면 끝!!!

 

시작

 

1. 먼저 내 github 홈페이지에 새로운 Repository를 만든다.

그림 1. github 홈페이지에 new Repository 생성

 

2. 이것을 git Bash를 켜고 내가 관리할 폴더에 Clone 한다.

그림 2. git clone

clone 방법은 " git clone https://github.com/{Repo 주소}/{Repo 이름.git} {사용할 프로젝트 이름} "을 입력하면 위 사진처럼 clone 된다.

 

3. 여기에 기존 프로젝트중 필요한 것들을 clone한 폴더로 복사한다. 

그림 3. 기존 프로젝트 clone 받은 폴더로 복사

 

4. 복사 후 폴더로 들어간 다음 git status로 상태를 보면 다음과 같이 방금 변경 된 내용들이 출력 될 것이다.

그림 4. git status

 

5. 이것을 모두 add 한다. 

그림 5. git add

 6. 그 다음 commit 이후 push 하면 끝!!!

기존 프로젝트와 새로운 Project를 Merge 하는것이 아닌 이유는, 기존 프로젝트의 양이 엄청 적었기 때문에 걍 새로 추가하는게 더 빠를 것이라고 판단했기 때문이다.

 

Eclipse에서 UI를 이용해서 하는 방법도 물론 있지만, 개인적으로 Bash로 관리하는게 편함
프로젝트 두개를 합치는 방식은 나중에 할일이 생길때 정리하겠음.

단순한게 최고시다 빠이야!!

'IT > Git' 카테고리의 다른 글

reset, revert, stash  (0) 2020.05.03
Git submodule?  (0) 2020.03.07
Git - tag 긋기  (0) 2019.06.21
Git 개념 (2) - pull / commit / push  (0) 2019.05.22
Git 개념 - init, clone  (1) 2019.05.20

git을 사용하려면 git에 대한 개념을 알아야 겠죠.
(관리자 입장이 아니면 사실 pull/ commit /push만 알면 될듯 하네요)

물론, 제가 배운 내용의 출처는 " https://git-scm.com/book/ko/v1 "이며, 해당 책에는 Git에 관한 모든 내용이 완전 잘정리 되어있습니다. 

 

Git - 시작하기

Chapter 1 시작하기 이 장에서는 Git을 처음 접하는 사람에게 필요한 내용을 다룬다. 버전 관리 도구에 대한 약간의 배경지식, Git의 특징, Git을 설치하는 법 그리고 Git을 시작하기에 앞서 필요한 설정을 하는 방법을 설명한다. 이 장을 다 읽고 나면 Git의 탄생 배경과 Git이 사용되는 이유를 이해하고, Git을 시작하기 위한 준비가 되어있을 것이다.

git-scm.com

하지만 저는 급하게 프로젝트 만들거나 혼자서 놀다가 갑자기 생각안날때를 대비해서 정리하도록 하겠습니다.

정리하려는 내용은 개념 기반입니다. 제가 Git을 관리할때 리눅스 서버에서 관리를 했기때문에 'Git Bash'를 이용하여 예제를 만들 것 입니다.

결론적으로 Git 관리 tool선택은 개념이 똑같기 때문에 무엇을 선택하든 상관이없습니다.
(개발환경 내 Git 관리(ex. Spring git 연동관리/ Working tree/ GitHub Desktop... 등) tool을 이용해서 관리해도 되지만, 전 터미널에서 관리하는게 편합니다. 취존부탁ㅎ)

 

 

목차
1. git --help
2. git init
   2-1. git 저장소(repository) 만들기
   2-2. bare 저장소(bare repository) 만들기
3. git clone
   3-1. git clone 사용
4. repository 생성 요약정리

 

 

 

1. git --help

Q. git을 사용할때 명령어가 생각이 안난다면?

A. git --help 치면 아래 사진처럼 다 나옵니다.

사진 1. git --help

 

그래서 1장에 정리할 내용은? start a working area부분

clone과 init 입니다.

 

2. git init

'git init' 은 .git 이라는 하위 폴더를 생성하여 해당 폴더를 git으로 관리할 수 있게 해주는 명령어 입니다.
.git 폴더 내에는 프로젝트 관리를 위해 필요한 내용을 담는 내용물로 구성되어 있습니다.

 

git으로 프로젝트를 관리하려면 git으로 관리할 프로젝트에 'git init' 명령어를 통해 초기화 하여 관리할 수 있게 됩니다.

사진 2. git init 사용

위 사진에서 보듯이 'git init' 명령어를 사용하게 되면 .git 이라는 폴더가 생성 됩니다.
.git 폴더 내에는 git 관리에 필요한 파일들이 있습니다. 

git init 명령어를 통해 .git이 생성 되면 해당 프로젝트는 git으로 관리할 수 있게 되는 것이죠!

2.1 git 저장소(repository) 만들기

그런데, 새로 만들 폴더를 저장소(repository)로 만드려면, repo를 가르키는 master가 필요하고, 이것은 최초 1회 commit을 통해 생성할 수 있습니다.
그렇기 때문에 아래 사진처럼 ReadMe.txt 파일을 add하고 commit을 함으로써 저장소가 생성이 된 것입니다!

사진 3. git repository 생성

 

git의 사용 목적은 다수의 사용자들과 함께 프로젝트를 진행하기 위함입니다.

프로젝트 용량이 커지게 되면, 전체 프로젝트를 왔다갔다 저장소로 옮기기 힘들어 집니다.

그렇기 때문에 원격 저장소는 실제 작업 파일을 가지고 있는 일반 저장소(repository) 보다는
프로젝트의 정보변경 사항만 적용이되는 bare repository가 원격 저장소로 적합합니다.

 

 

2.2  bare 저장소(bare repository) 만들기

 

bare repositroy를 만드는 법은 간단합니다. 아래와 같은 명령어로 만들 수 있습니다.
$ git clone --bare {프로젝트 이름} {프로젝트이름.git}      //(사진 4. 참고)
.git 이름표를 붙이는 이유는 bare repo라는것을 알기 위함입니다.

사진 4. bare repository 생성

 

이렇게 생성된 bare repository는 기존 저장소와 내용물이 다릅니다.

사진 5. bare repo 내용물

 

내용물 대신 프로젝트의 정보를 담고있는 파일들로 저장이 되어 있습니다.

그렇기 때문에 프로젝트의 실제 작업물을 담고있는 no bare 저장소에 비해 변경 사항만 저장되는 bare저장소는 가볍기 때문에 원격저장소로 두기 적절합니다.

그러면, bare repo에서 변경된 내용은 어떻게 저장되는가? 하면 위 사진의 object 폴더 내에 저장이 됩니다. (물론 사람이 알아볼수있게는 안써있음)

 

 

 

3. git clone

git clone이란 저장소(Repository)로 부터 프로젝트를 복제하는 것을 말합니다.

이 개념을 이해 하려면 아래 사진을 보면 됩니다.

사진 6. git 관리 형태

 

간단하게 보면 각 컴퓨터들은 저장소로 수정한 내용을 push하고, pull 받으며 버전을 동일하게 유지합니다. 이러한 과정 덕분에 모든 컴퓨터들은 협업이 가능해지게 되는 것 입니다.

 

3.1 git clone 사용법

Q. 그럼 git clone은 언제 사용할까요?

A. git clone을 사용하는 것은 일반적으로 2가지 입니다. 

1) bare repository를 생성할 때 (최초 생성할때 사용)
2) 저장소에 있는 Project를 내 PC에 설치할때 (자주 사용)

실질적으로 clone은 2번 경우에 자주 사용됩니다.

진행중인 프로젝트에 투입하게 되는 경우, 저장소에 있는 프로젝트를 내 컴퓨터에 설치해야 하는 경우가 많기 때문입니다.

 

- 사용법은 ?

git clone 사용법은 간단합니다.  아래와 같은 형태로 사용합니다.

git clone {프로토콜} {프로젝트 주소}.git 

 

구체적으로 Git에서는 Local, HTTP, SSH, Git 이렇게 4가지 프로토콜을 지원합니다. 따라서 이 프로토콜에 맞게 명령어를 입력하면 clone 할 수 있습니다. 

ssh 예제) $git clone ssh://{서버 계정}@{서버 주소}:/{저장소 위치/받을 프로젝트 이름}.git

http 예제) $git clone https://{url/받을 프로젝트 이름}.git

 

git 지원 프로토콜에 대해 자세히 할고싶다면 여기 클릭

 

그럼 방금 만든 bare repository에서 git clone을 해보겠습니다.

$git clone project_origin.git/ project   
-> Local에서 clone 하기때문에 따로 프로토콜을 이용할 필요는 없습니다.
remoteproject_origin.git의 내용을 project 라는 이름으로 clone 하고자 합니다.

사진 7. git clone 예제

잘 되는군요.

project 폴더 내용과 remote 주소를 볼까요?

사진 8. git clone 예제(2)

정상적으로 clone 된것을 확인할 수 있습니다.

 

4. repository 생성 요약정리

결과적으로 오늘 정리한 내용은 아래 그림 하나로 정리가 가능합니다.
repository 생성 방법만 보려면 이것만 보면 되겠네요.

사진 7. Repository 생성 흐름도

 

오늘은 여기까지!

 

'IT > Git' 카테고리의 다른 글

reset, revert, stash  (0) 2020.05.03
Git submodule?  (0) 2020.03.07
Git - tag 긋기  (0) 2019.06.21
Git 개념 (2) - pull / commit / push  (0) 2019.05.22
기존에 있던 프로젝트 Git으로 관리하기  (0) 2019.05.20

상속!!!!

 

면접 단골 질문!

Q. 객체지향 프로그래밍(OOP)의 특징이 무엇인가요?

A. 객체지향 프로그래밍의 특징은 추상화, 캡슐화, 상속과 다형성 입니다. 

 

이 중에서 오늘 다루어볼 내용은 상속! 입니다.

또, 자바 시험볼 때 상속 관련 문제가 상당히 많이 출제되는 것 같습니다.

헷깔리거든요 ㅋㅋ (알면 아니지만)

 

어쨋건! 그래서 오늘 정리할 내용은 "상속 + 다형성" 입니다.

- 목차
1. 상속 개념
2. 생성자
3. OverLoading (다형성)
4. OverRiding
5. super

 

 

 

 

1. 상속 개념

Q. 상속이란 ?  

A. 상속을 통해 부모 클래스에 선언된 메서드나 변수를 자식 클래스에서 사용, 확장시킬 수 있는 것을 말합니다.
extends 라는 키워드를 통해 상속 받을 수 있습니다.

 

- 간단한 예로 살펴봅시다.

사진 1. 상속 예제 1

 

부모 클래스인 Parent class와 자식 클래스인 Child class를 생성 후 사진 1과 같이 Child class에 Parent를 상속 받습니다.

그러면 부모 클래스에 있는 print_parent()라는 메서드 및 변수들을 사용할 수 있게 됩니다. 

 

그러면, 궁금한 것이 생기죠. 부모 클래스의 어디까지 쓸 수 있는가!?

-> private으로 선언되지 않은 나머지는 받아 쓸 수 있습니다.

 

큼..심플하군.. 다음!

 

2. 생성자

상속을 배울때 나오는 개념 중 하나는 생성자!

Q. 생성자란 무엇이냐?

A. 클래스와 동일한 이름을 가진 메서드로, return 값이 없고, 초기화 목적으로 사용되는 메서드를 말합니다.

(전 이해 안하고 그냥 기계마냥 이렇게 외웠었음..)

 

맞는말이지만 제가 궁금한건 왜? 생성자를 쓰냐는 것이지요.
이유를 찾아보니, 단순했습니다. 

1. 초기값을 강제하기 위해서
2. 값을 초기화 하기 위해서

 

물론 생성자를 통하지 않고 값을 초기화 할 수 있습니다.

Child 객체를 3개 만들고 값을 초기화 하는 코드 입니다.

public class Child extends Parent{
		
	public static void main(String args[]) {
		
		Child c1 = new Child();
		Child c2 = new Child();
		Child c3 = new Child();
		
		c1.name = "c1 name";
		c1.age = 1;
		c1.assets = 1;
		c2.name = "c2 name";
		c2.age = 2;
		c2.assets = 2;
		c3.name = "c3 name";
		c3.age = 3;
		c3.assets = 3;
	}
}

객체가 늘어날수록 개판이 될것같네여

생성자를 통해 초기화 한다면? (물론, 생성자를 통한 초기화를 위해, Parent와 Child에 생성자를 선언해줍니다.)

사진 2. 생성자 초기화를 위한 코드수정

 

깔끔하군여!

이렇게 초기화와 값의 입력을 강제하면 보다 통일된 형태와 깔끔한 코드로 작성할 수 있습니다. 그렇기 때문에 생성자를 사용하는 것이지요.

 

- 생성자 만들기

그러면, 생성자는 어떻게 만드는가? 가 궁금해집니다.
(아래 예제는 맨 위 '사진 1. 상속예제' 기준으로 작성했습니다.)

먼저 기본 생성자를 알아봅시다. 기본 생성자의 형태는 다음과 같습니다.

클래스이름(){

}

겁나 간단하군요. 


일반적으로 클래스를 생성하고, 객체를 생성할 때 우리는 Child c = new Child(); 이렇게 씁니다.

당연한거아닌가!?

여기서 주목할 점은 new Child() 입니다. 하나씩 명령어를 살펴봅니다.

new Child() -> new '객체'를 생성하겠다 -> 객체 'Child()'를 생성하겠다 -> Child()는 method 로군. 
-> ? -> 나는 Child() 라는 메서드를 생성한 기억이 없다!!!

일반적으로 클래스를 생성하면 자동으로 생성자가 생성됩니다. (직접 생성 안해도 자바 컴파일러가 알아서 만들어줌)
그래서 따로 생성자를 선언하지 않고, 클래스를 생성 해도 객체가 생성 될 수 있었던 이유입니다.

Class가 선언되고 실행하려면 동작 메서드가 필요한데 아무것도 없으면 곤란합니다.
그래서 만약 아무것도 작성되있지 않다면 기본 생성자를 생성하게 되는 것 입니다.

 

 

- 생성자의 생성 조건은 다음과 같습니다.

1. 클래스의 이름과 동일해야 한다.
2. return 값이 없어야 한다.
3. 생성자는 매개 변수값이 다르면 여러개 생성이 가능하다.

'사진 2. 생성자 초기화를 위한 코드수정' 생성자를 기준으로 봅시다.
기본적으로 생성자가 생성이 되었는데, Child(String name), Child(String name, int age, int assets) 과 같이 또 작성이 되어있습니다.

이게 무엇인가!? 생성 조건 3을 보듯 생성자는 매개 변수가 다르면 생성자는 여러가지로 생성될 수 있습니다.

이것을 설명하는 이유는 자바 필ㄹㄹㄹㄹㄹ수 개념 OverLoadig 과 관련이 있기 때문입니다.

 

 

 

 

3. OverLoading

Q. OverLoading이 뭔데?
A. 생성자의 파라미터의 타입이나, 개수로 구분이 되기 때문에 생성자의 초기화 목적에 따라 같은 이름으로 여러개를 구현할 수 있죠. 이것을 오버로딩(OverLoading) 이라고 합니다.

바로 예시 들어갑니다.

public class Child extends Parent{
	
	String name;
	int age;
	Child(String name){
		System.out.println("set Child name");
	}
	Child(int age){
		System.out.println("set Child age");
	}
	Child(String name, int assets) {
		//super(name, assets);
		System.out.println("set Child name,assets");
	}

	public static void main(String args[]) {
		
		Child c1 = new Child("c1_name",1);
		Child C2 = new Child("c2_name");
		Child C3 = new Child(3);
	}
}

 

Q. 출력 값은 무엇일까요?
A.
set Child name,assets
set Child name
set Child age

이렇듯, 파라미터의 타입, 개수에 따라 구분이 가능하게 하고, 이름이 같은 생성자를 여러개 만드는 것
이것을 "짐을 더 실어준다"라고 해서 = OverLoading 이라고 말합니다.

 

[★○@!!] 여러가지 형태로 사용 할 수 있는 '오버로딩(OverLoading), 오버라이딩(OverRiding)'은 OOP 특징이 중 하나인 '다형성'을 지원하기 위한 장치이기도 합니다.

 

 

 

4. OverRiding

Q. 그럼 OverRide는 뭔가요?
A. '재정의'요

맞습니다!! 재정의하는것을 OverRide라고 합니다.
근데, 무엇은 재정의 한다는거지?

부모 클래스로 부터 상속받은 메서드를 다른 방식으로 사용하도록 다시 사용하는 것을 재정의 라고 합니다.

Q. 아래 사진과 같이 작성을 했을때 출력값은 무엇일까요? Parent_print vs Child_print

사진 3. 오버로딩 예제

A. Child_print 입니다.

위 예제와 같이 부모 클래스에서 상속받은 print_parent()라는 메서드를 자식 클래스에서 다시 정의해서 사용하는 것
이것을 OverRide라고 합니다. 

추상 클래스를 상속받아 사용할때 오버라이드를 주로 사용합니다.

이렇게 오버로딩과 오버라이딩의 차이를 알아 보았습니다.
상속 문제가 장난치기 참 좋은것 같습니다. 장난에 말리지 않게 꼼꼼히 정리해 두면 좋을 것 같네요 

 

 

5. super

위 예시(사진 2)를 보다보면, super() 라는 메서드를 볼 수 있습니다.

이건 또 뭐야!?

super()를 보기 전에 예제를 하나 봅시다.

public class GrandParent {
	GrandParent(){System.out.println("GrandParent_Constructor"); }
}

public class Parent extends GrandParent{
	Parent(){ System.out.println("Parent_Constructor");}
}

public class Child extends Parent{
	Child(){System.out.println("Child_Constructor");}
	
	public static void main(String args[]) {
		Child c = new Child();
	}
}

Q. 이거 실행하면 결과값이 뭘까요?

A.
GrandParent_Constructor
Parent_Constructor
Child_Constructor

상속을 받는 경우 생성자는 부모 클래스를 찾아가도록 설정이 되어있습니다.
생성자를 생성하지 않으면 Default 생성자를 생성하듯,

부모생성자를 부르지 않아도 알아서 부르도록 설정이 되어있지요.
저기서 보이지 않지는 않지만 부모 클래스를 참조하도록 super() 메서드가 작성되어 있습니다!

참 재미있지요?

 

그럼 대체 super가 무엇이냐 하면

정의는 다음과 같습니다.
super 키워드는 부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조 변수이다.

 

super는 기본적으로 부모 클래스를 메서드를 참조합니다. 그래서 위에서 예시를 볼때
GrandParent 까지 참조하는 이유는 아래와 같습니다.

1. Child에서 부모 참조(super())를 통해 Parent를 참조하면서 생성자 Parent()가 실행됨
2. Parent() 실행되면서 안에 보이진 않지만 작성 된 super()로 인해 GrandParent를 참조함
3. GrandParent를 참조 하면서 GrandParent()가 실행 됨. GrandParent는 상속받지 않았으므로, super()가 생성되지 않음. 

그리고, 결과적으로 메모리는 스택으로 실행되기 때문에 GrandParent -> Parent -> Child 순서로 출력이 되는 것 입니다!

 

참고,
상속을 받게되면 super()가 생성되기 때문에 부모를 참조하려 합니다.  그래서 부모 클래스에 적절한 생성자가 없다면 자식클래스의 생성자를 만들었을때 오류가 생긴다는 점 참고하면 좋을 것 같습니다!

기본형이 아닌, 파라미터로 구분가능 부모 생성자를 호출하고 싶다면 표기 아래와 같이 사용 가능 합니다!

사진 4. super 사용법 1

 

이상 상속 정리 끝

 

 

'IT > Java' 카테고리의 다른 글

String to Date , Date to String, Time add  (0) 2020.10.19
Eclipse java Working Set 설정  (0) 2020.03.07
interface와 상속 차이 (미완)  (0) 2019.12.22
Java 다중 반복문 빠져나가기  (0) 2019.10.05
01. 자바 접근제어  (0) 2019.01.08

자바의 기본 개념들이 생각이 안나거나 이해가 잘 안되었던 부분들을 

여기에 하나씩 정리해 볼 예정 입니다. 그렇기 때문에 보통 책에 나오는 목차들과는 달리 마구잡이로

정리될 것 같네요 ㅠㅠ


어쨋건 시작해 보겠습니다!


#접근 제어


이클립스(Eclipse)를 설치하고  코딩 예제를 시작하고

Hello World!를 출력하고자 한다면 다음과 같은 예제를 많이 사용합니다.

------------------------------------------------------------

Public class hello

public static void main(String[] args){

System.out.println("Hello World!");

}

}

------------------------------------------------------------

그러면 오늘은 위에서 밑줄이 그어진 public과 같은 접근 제어자에 관해서 정리해 볼 예정입니다.


* 자바의 접근 제어 지정자

멤버 접근 제어는 public, private, protected 이렇게 3가지 지정자로 이루어집니다. 

그럼 이 접근 지정자를 표로 정리해 보면 다음과 같습니다.

접근 지정자 

클래스 

패키지 

자식 클래스 

전체 세계 

public 

O

O

O

O

protected 

O

O

O

X

 없음

O

O

X

X

 private

O

X

X

X


사실 이것만 보면 뚜렷하게 와닿지가 않습니다.

- 간단하게 그림으로 정리하기

이렇게 정리하면 어디서 사용 되고, 또 안되는지를 확인 할 수 있을 것 같습니다.

(자식 클래스의 경우 상속 개념을 알면 따로 설명하지 않아도 될 것 같아서 표기하진 않았습니다.)


- 클래스 끼리는 객체를 생성하면 사용 가능 합니다.

- 패키지로 떨어진 것은 import를 사용하면 사용 가능 합니다.

- 전체 세계 즉, 다른 프로젝트에 있는 클래스를 사용하고자 한다면 프로젝트 속성 -> Build Path 설정 -> "사용할 클래스가 있는 프로젝트" 추가

   한 후 import 하면 사용할 수 있습니다.


쉽지만 중요한 개념이기 때문에 정리 해봤습니다.

또 1차 자바를 주력으로 하는 회사에서 필기 시험에서 가끔 나오기 때문에 위에 표를 외워두면 두면 좋을 것 같네요 


끝!



'IT > Java' 카테고리의 다른 글

String to Date , Date to String, Time add  (0) 2020.10.19
Eclipse java Working Set 설정  (0) 2020.03.07
interface와 상속 차이 (미완)  (0) 2019.12.22
Java 다중 반복문 빠져나가기  (0) 2019.10.05
02. 상속  (0) 2019.01.15

오늘은 ssh서버로 이용할 수 있도록 셋팅을 해보도록 하겠습니다.


오늘 할일

1. 설치하기

2. ssh 설정 하기

3. 포트 열어주기

4. ip 주소 확인하고 접속하기



1.  ssh 설치 및 설정 


1-1. 설치하기

$sudo apt-get install ssh

사진1. ssh 설치


설치된 ssh의 위치는 /etc/ssh 에 설치가 됩니다.

사진2. ssh 설치 목록


빨간색 네모박스로 표시한  sshd_config 파일은 접근 권한을 설정하기 위해 자주 사용하게 될 것입니다.

그럼 바로 sshd_config를 확인 해 보도록 하죠

sshd_config 설정에서 주로 사용하는 것은 포트 설정과 사용자들에게 접근 권한을 부여할때 주로 사용하게 됩니다.

그래서 주로 봐야 할 것은 아래 3가지


1-2 포트 설정하기

1) 포트 설정 

 - 5번째 라인에 있는 포트를 수정하면 원하는 포트로 변경할 수 있습니다. (ssh 지정포트는 22번 이기 때문에 저는 그냥 22번포트 사용할 예정입니다.)

사진3. ssh port 변경


2) PermitRootLogin

 - 루트 계정으로 접근을 허용할지 여부를 설정하는 부분 입니다. 

 28번째 라인의 prohibit-password를 그대로 두거나 허용하고 싶은경우 'yes' 허용하지 않을 경우 'no'로 설정 해 주세요.

사진4. PermitRootLogin 설정


3)  유저 접속 권한 부여

 - 맨 아래에 아래 사진과 같이 AllowUsers와 AllowGroups를 작성해 주시고

   접속을 허용하고자 하는 계정과 그룹을 작성 해 주시면 됩니다. (구분자는 띄어쓰기로 하는것 참고 해주세요.)

사진5. 유저 접속 권한 부여


변경된 사항을 저장하고 저장된 내용을 적용하기 위해서 sshd를 재시작 해주어야 합니다.

사진6. sshd 재시작


이렇게 하면 ssh 설정은 완료 됩니다.

이제 서버 방화벽에서 해당 포트를 열어주어야 접속이 가능하기 때문에 포트를 열어주도록 하겠습니다.


1-3. 포트 열어주기

먼저 방화벽을 확인하는 명령어는 다음과 같습니다.

ufw status - 상태 확인

ufw enable - 활성화 (포트를 열어주기 위해 활성화를 시켜야 합니다.)

ufw disable - 비활성화 (defualt 값이며 이 경우 모든 포트를 차단합니다.)

ufw allow {port or ip} - 특정 포트를 오픈 합니다.

ufw deny {port or ip} - 특정 포트를 거부 합니다.

사진7. UFW 설정하기


ufw enable하여 포트를 열어준 뒤 접속 가능한 포트를 설정 해 주어야 합니다.

사진8. 22번 포트 open


netstat -tlnp 명령어를 통해 확인 하면 포트가 열린것을 확인할 수 있습니다.

사진9. 포트 확인


2. 서버 IP 확인하기


Linux에서 IP 확인하기 -> ifconfig


서버 컴퓨터가 존재한다면 IP 이제 해당 IP를 통해 ssh로 접근이 가능한 것을 확인 할 수 있습니다.

Local 컴퓨터에서 putty 혹은 teraterm과 같은 툴을 통해서 서버에 접속하여 편리하게 작업할 수 있도록 설정 해 주었습니다.


개인적으로 본인만 접속 가능한 서버 컴퓨터를 만들고 싶다면 iptime의 포트 포워딩을 통해서 외부에서 접속 가능한데

이 작업을 진행해 보도록 하겠습니다.






'IT > Linux(ubuntu)' 카테고리의 다른 글

ubuntu 계정생성  (0) 2021.11.26
ubuntu 웹서버 구축해보기  (0) 2021.11.26
우분투 계정 생성하기  (0) 2018.12.10
Windows PC 에서 ubuntu linux 시작하기  (0) 2018.12.06

+ Recent posts