※ On-premise : 내부망 → 서버를 자체적으로 직접 설치하여 운영하는 방식

※ Cloud Computing : 인터넷을 통해 가상화된 컴퓨터의 리소스를 제공하는 것

 

1. 유닉스로부터 시작된 리눅스의 역사

1) 유닉스

- 초기 유닉스는 C언어로 작성

- 비상업적인 목적, 연구소에서 주로 활용

 

2) 리눅스

- 유닉스와 유사한 운영체제 개발 목적

- 개방성, 유연성, 안정성 등의 특징

 

3) 유닉스와 리눅스의 관련성

- POSIX 호환성 유지

- 유닉스와 유사한 명령어, 파일시스템, 네트워킹 → 쉬운 이식성과 호환성 제공

 

2. 리눅스 운영체제

1) RedHat 계열

- RPM(Redhat Package Manager) 사용 → .rpm 확장자

- yum 또는 dnf를 사용하여 패키지 관리

- /etc/sysconfig 디렉터리를 사용하여 시스템 설정 저장 → systemd 사용하여 시스템 초기화 및 서비스 관리

- Red Hat Enterprise Linux, CentOS, Fedora 등

 

2) Debian 계열

- APT(Advanced Package Tool) 사용 → .deb 확장자

- apt-get, aptitude, dpkg 등을 사용하여 패키지 관리

- /etc 디렉터리를 사용하여 시스템 설정 저장 → systemd, sysvinit 사용하여 시스템 초기화 및 서비스 관리

- Debian, Ubuntu, Linux Mint 등

'네트워크캠퍼스 > LINUX' 카테고리의 다른 글

프로세스  (0) 2024.01.16
텍스트에디터  (0) 2024.01.15
파일시스템  (0) 2024.01.11
프롬프트  (0) 2024.01.10
Shell  (0) 2024.01.09

1. 은닉, 캡슐화 (Encapsulation)

1) 정보은닉

- 사용자에게 상세한 내부 구현을 숨기고, 필요한 부분만 보이게 하는 것

- 은닉을 사용하기 위해서는 클래스 멤버변수의 접근제한자를 private으로 설정

- 은닉된 멤버변수에 접근하기 위해서는 공개된(public) 메서드를 통해 접근

  ① 변수의 값 변경 : setter 메서드

  ② 변수의 값 얻어오기 : getter 메서드

- 공개 메서드를 이용하여 데이터 변경 시 메서드 내에 데이터 유효성을 검증할 수 있는 루틴을 넣을 수 있음

- 접근 권한 체크 로직을 통해 인가되지 않은 사용자에게 중요한 데이터나 로직을 숨길 수도 있고, 제어할 수도 있음

- 외부에 공개하고 싶지 않은 메서드도 private으로 선언 가능

 

2) 예시

① badcase

package encapsulation.bad;

public class MyBirthday {
	int year;
	int month;
	int day;
	
	void showDateInfo() {
		System.out.println("내 생일은");
		System.out.println(year + "년");
		System.out.println(month + "월");
		System.out.println(day + "일");
		System.out.println("이니까 선물을 준비하세요!");
	}
}
package encapsulation.bad;

public class MainClass {

	public static void main(String[] args) {
		// 같은 패키지 내부 클래스파일을 가져다 쓸 때는 import 필요 없음
		MyBirthday b = new MyBirthday();
		
		b.year = 2024;
		b.month = 13;  // 13월을 넣어도 그냥 동작
		b.day = 32;    // 32일을 넣어도 그냥 동작
		
		b.showDateInfo();
	}
}

위와 같이 누구나 정보에 접근할 수 있기 때문에 아무런 값을 넣어도 그냥 동작한다.

 

② goodcase

※ 리팩토링이란?

→ 기능을 유지하면서 코드의 구조를 유지보수하기 좋게 개선하는 것

package encapsulation.good;

public class MyBirthday {
	// 은닉(캡슐화) 시 변수는 무조건 private으로 처리
	private int year;
	private int month;
	private int day;
	
	// alt+shift+s 혹은 마우스 우클릭 후 source
	// generate constructor using fields 선택
	public MyBirthday(int year, int month, int day) {
		this.year = year;
		setMonth(month);
		setDay(day);
	}
	
	// 은닉된 변수에 접근하기 위해서는
	// 클래스 설계 시 미리 설정해둔 setter/getter 메서드를 이용해 접근

	// setter 메서드 선언
	// 1. setter 메서드는 은닉변수에 값을 저장(세팅)하기 위해 선언
	// 2. 메서드의 접근제한자는 public으로 설정하고, 이름은 일반적으로 set+변수명으로 지정
	
	// setMonth를 설계하여 오로지 1~12 중 하나만 받아서 저장하도록 지정
	public void setMonth(int month) {
		if(month < 1) {
			this.month = 1;
		} else if (month > 12) {
			this.month = 12;
		} else {
			this.month = month;
		}
	}
		
	public void setDay(int day) {
		if(day < 1 || day > 31) {
			this.day = 1; // 범위를 벗어나는 값이 들어올 경우 1로 고정
		} else {
			this.day = day; // 범위 내의 값이면 그대로 지정
		}
	}
	
	void showDateInfo() {
		System.out.println("내 생일은");
		System.out.println(year + "년");
		System.out.println(month + "월");
		System.out.println(day + "일");
		System.out.println("이니까 선물을 준비하세요!");
	}
}
package encapsulation.good;

public class MainClass {

	public static void main(String[] args) {
		// 12월 32일같은 없는 날짜를 걸러주는지 체크
		MyBirthday b = new MyBirthday(2024, -37, 50);
		// b.day = 50; // private이므로 외부인 main에서 직접 주입 불가능
		b.showDateInfo();
	}
}

위와 같이 잘못된 값을 넣어도 setter로 정의해둔 값에 따라 결과가 잘 출력되는 것을 확인할 수 있다.

 

생성자 생성 후 메인함수에서 값을 변경할 수 없도록 하고 싶다면 setter 함수를 private 접근 지정자로 설정해두면 된다.

일반적으로 setter 함수는 private으로 두는 것이 바람직하다.

'네트워크캠퍼스 > JAVA' 카테고리의 다른 글

배열의 다형성  (0) 2024.01.10
클래스의 다형성  (0) 2024.01.09
접근제한자  (0) 2024.01.08
상속  (0) 2024.01.05
기본 타입 vs 참조 타입  (0) 2024.01.05

1. 병합

→ 특정 브랜치의 변경내역을 다른브랜치로 가져오는 것. 즉, 두 브랜치의 코드가 하나로 합쳐짐

 

1) 소스트리에서 브랜치 병합하기

master 브랜치에는 무조건 돌아가는 최종 코드만 커밋해야 하기 때문에 feature;a에 먼저 머지를 해보고 문제가 없다는 것을 검증해야 한다.

 

feature;a로 체크아웃한 후 master 우클릭에서 현재 브랜치로 master 병합을 클릭한다.

 

master에서 작업한 메인기능 2번기능 추가가 feature;a에 추가되어 있어야 한다.

 

해당 파일을 확인해보면 2번 기능 추가 내용이 잘 들어있는 것을 확인할 수 있다.

 

master를 체크아웃한 후 확인해보면 master 브랜치는 5번 커밋에 머물러 있기 때문에 feature;a에서 만든 a.txt는 확인할 수 없다.

 

master를 체크아웃한 상태에서 feature;a를 병합한다.

 

위와 같이 양쪽 브랜치가 동등해진 것을 확인할 수 있다. → 하나의 기능 개발이 완료된 것을 의미

 

2) CLI에서 브랜치 병합하기

기본적으로 master보다는 feature;a에 먼저 머지를 해야 하므로 feautre;a 브랜치로 체크아웃을 한다.

 

git merge 타겟브랜치명을 통해 병합을 할 수 있다.

 

위와 같은 화면이 나온다면 esc 키 누른 후 :q!를 입력해서 빠져나온다.

 

위와 같이 feature;a에 마스터에 추가된 내용을 끌고 온다.

 

위와 같이 feature;a 체크아웃 상태에서 gittest.txt 파일에 2번 기능이 추가되어 있는 것을 확인할 수 있다.

 

master 체크아웃 상태에서는 아직 머지를 하기 전이므로 a.txt 파일을 확인할 수 없다.

 

master 브랜치에서 feature;a를 merge 해준 후 확인해보면 위와 같이 잘 병합된 것을 확인할 수 있다.

 

 

2. 충돌 문제 해결하기

같은 파일에 대해 각 브랜치에서 새 브랜치를 생성한 이후 새롭게 같은 파일을 수정하고 병합하는 경우 충돌이 발생한다.

 

1) 소스트리에서 충돌 문제 해결하기

master로 체크아웃 한 후 gittest.txt에 3번 기능을 추가한 후 add, commit을 진행한다.

 

위와 같이 잘 커밋된 것을 확인할 수 있다.

 

feature;a로 체크아웃한 후 파일을 확인해보면 위와 같은 상태이다.

 

같은 위치에 위와 같은 내용 추가 후 add, commit 진행한다.

 

위와 같이 gittest.txt 3번 기능, 즉 동일한 지점에 두 브랜치에서 작업한 경우 merge를 진행하면 오류가 발생할 것이다.

 

이처럼 머지하려고 하면 master의 코드가 옳은지, feature;a의 코드가 옳은지 모호한 상황이 발생하기 때문에 충돌이 일어난다.

 

충돌난 파일을 더블클릭에서 연 후 위아래 코드를 적절하게 반영하고 다시 병합하면 충돌이 해결된다.

 

위 내용은 충돌 발생 시 자동으로 작성된다.

 

수정 후 다시 커밋해보면 위와 같이 병합이 잘 된 것을 확인할 수 있다.

 

2) CLI에서 충돌 문제 해결하기

먼저, feature;a 브랜치에서 gittest.txt 파일에 3번 기능을 추가한다.

 

add와 commit을 진행해준다.

 

마스터 브랜치로 체크아웃한 후 같은 지점에 3번 기능을 추가해준다.

 

add와 commit을 진행해준다.

 

feature;a 브랜치로 체크아웃 후 master와 병합하려고 하면 위와 같이 충돌 에러가 발생하는 것을 확인할 수 있다.

 

위와 같이 충돌난 파일을 열고 수정해준다.

 

다시 머지를 진행해보면 먼저 커밋을 하라는 메시지가 나온다.

 

add와 commit을 진행한 후 다시 merge를 해보면 위와 같이 이미 병합이 완료된 것을 확인할 수 있다.

'네트워크캠퍼스 > GIT, GITHUB' 카테고리의 다른 글

클론  (0) 2024.01.11
로컬 저장소 내역 깃허브 업로드  (0) 2024.01.10
브랜치  (0) 2024.01.04
커맨드라인을 활용한 깃  (0) 2024.01.03
소스트리를 활용한 깃  (0) 2024.01.02

1. 브랜치

→ 기능 작성 시 반영될지 안될지 모르는 기능을 임시적으로 저장하는 새로운 노선을 만드는 것

즉, 특정 시점에 논리적인 복사본을 만들어 기능 단위로 반영여부를 결정하며 개발하도록 도와주는 기능

 

1) 소스트리로 브랜치 생성하기

 

위와 같이 브랜치를 생성했고, 아직 다른 작업을 하지 않았기 때문에 새로운 브랜치와 마스터 브랜치는 차이가 없다.

 

a.txt 파일 추가 후 커밋하면 위와 같이 feature;a가 올라간 것을 확인할 수 있다.

 

더블클릭을 통해 master 브랜치로 체크아웃하고 폴더를 확인해보면 a.txt가 없는 것을 확인할 수 있다.

 

위와 같이 gittest.txt 파일의 내용을 수정해준 후

커밋을 진행하면 위와 같이 master 브랜치에 커밋된 것을 확인할 수 있다.

 

2) CLI로 브랜치 생성하기

git branch 브랜치명 명령어를 통해 새 브랜치를 생성할 수 있다.

이때 홑따옴표를 사용하는 경우 ' ' 로 감싸주어야 한다.

브랜치를 생성하면서 동시에 체크아웃까지 원한다면 git checkout -b 브랜치명을 이용하면 된다.

 

git branch 명령어를 통해 현재 레포지토리 내부의 브랜치 전체를 조회할 수 있다.

 

git checkout 명령어를 통해 새로운 브랜치를 체크아웃한 것을 확인할 수 있다.

 

새로운 a.txt 파일 생성 후

 

add, commit 명령어를 이용하여 스테이지에 올리고 커밋까지 진행한다.

 

git log --graph : 단순조회

git log --branches --graph --decorate --oneline : 전체브랜치 한줄로 시각화

git log --graph --all : 전체 로그 다 조회

 

master 브랜치를 체크아웃한다.

 

gittest.txt 파일 수정 후 위와 같이 add와 commit도 진행한다.

 

브랜치를 확인해보면 위와 같이 나눠져 있는 것을 확인할 수 있다.

 

※ 만약, 추가기능을 반영하지 않는다면 추가브랜치를 삭제해도 된다.

→ git branch -d 브랜치명 명령어를 이용해 삭제할 수 있다.

'네트워크캠퍼스 > GIT, GITHUB' 카테고리의 다른 글

클론  (0) 2024.01.11
로컬 저장소 내역 깃허브 업로드  (0) 2024.01.10
병합  (0) 2024.01.05
커맨드라인을 활용한 깃  (0) 2024.01.03
소스트리를 활용한 깃  (0) 2024.01.02

+ Recent posts