본문 바로가기

카테고리 없음

2023.08.14 TIL - Java의 역사, 특징 및 github을 통한 브랜치 실습

 

항해99의 본 과정이 시작되었다. 오늘은 자바 문법에 대한 강의 위주로 진행하였고, github를 통해 코드 프로젝트를 제작, 브랜치 분리, 병합으로 README 파일을 수정하는 과제를 진행하였다.

 

JAVA

최초의 프로그래밍 언어로 입/출력 및 문맥을 가진 A 언어가 탄생하였고, 기계식 데이터 타입, 연산 기능, 메소드 기능을 추가한 B 언어가 탄생하였다. B 언어는 Bell 사에서 개발한 언어이기에 B 언어라고 명명한 것이라 한다만, A 다음이니 겸사겸사로 지은 이름이라 생각한다. C 언어는 B언어보다 더 좋은 언어라는 의미로 B 다음 알파벳인 C 를 사용한 C 언어로 이름이 붙었고, 자료형 데이터 타입, 자료구조가 추가되었다.

 

자바 언어는 언제 어디서든 동작 가능하다는 의미에서 자바 커피에서 이름을 따와 만들어졌다. 실제 이미지도 커피 모양을 띄고 있다. 주요 기능에는 C언어의 기능들에, 어느 기기에서도 실행가능하도록 하는 공통 실행 환경, 데이터와 메소드를 합친 클래스, 이를 통해 만든 객체가 있으며, 이 때문에 자바를 객체 지향 언어라 부른다.

 

자바의 장점은 크게 5가지로 나뉜다.

  1. 공통 실행 환경이 있기에 어느 기기에서도 사용가능하다.
    • 사용하는 운영 체제, 프로그램에 관계 없이 어디에서든 실행할 수 있다.
  2. 클래스와 객체를 통해 동작 원리가 실제 세상과 비슷하기에 이해하기 쉽고 유지 보수가 쉽다.
    • 존재하는 물건을 클래스, 그 물건이 할 수 있는 상호작용과 갖고 있는 정보를 각각 메소드, 변수로 표현한다.
  3. 안정성이 높아 오류를 방지하고 보안 상 안전한 언어이다.
    • 작성한 코드를 바이트 코드로 변환하는 컴파일러가 먼저 오류를 체크한다.
    • 자바 자체에서 지원하는 보안 기술이 많다.
  4. 대규모 앱 개발이 가능하다
    • 네트워크, 데이터베이스 연결 및 통신 등의 작업을 처리하는 API가 있다.
  5. 다양한 개발 도구와 라이브러리를 사용할 수 있다.
    • 개발에 필요한 작업을 보다 쉽게 처리할 수 있다.

자바를 실행하기 위해서는 자바 가상 머신(Java Virtual Machine, JVM)이라 부르는 것이 필요하다.

자바를 실행하기 위해 일종의 가상 기기를 만들어 주는 것으로, 이것 덕분에 어떤 장비, 어떤 환경에서도 모두 이 JVM을 설치하게 되면 자바를 실행할 수 있다.

 

JVM만으로 자바를 실행할 수 있는 것은 아니다. 그 위에 자바 실행 환경(Java Runtime Environment, JRE)을 설치해 주어야 한다. JRE가 있다만 Java 프로그램을 실행시킬 수 있다. 다만 정말로 실행"만" 시킬 수 있기 때문에 우리가 작성한 자바 언어는 JRE가 읽을 수 없다. 그렇기에 이를 JRE가 읽을 수 있도록 변환해주는 컴파일러 기능이 있는 자바 개발 키트(Java Development Kit, JDK)가 필요한 것이다. JRE와 JDK가 있어야 자바 언어를 개발하고 이를 실행시킬 수 있다.

 

자바의 참조형 변수 타입에는 Stack과 Heap 영역이 있는데, Stack의 경우 정적 메모리 영역이기에 정할 때 크기가 몇인지 정해야 한다. Heap의 경우에는 동적 메모리 영역이기에 크기를 별도로 지정할 필요는 없다.

 

 

GITHUB

일일 과제로 github의 레퍼지토리를 생성해 브랜치의 분리 병합을 통해 다인 개발 시 필요한 것들을 맛보았다. 이전 미니 웹 프로그래밍에서 소스트리를 사용했는데, 이전에는 저장소를 다른 계정에다 생성했었는데 이번에는 내 계정에 생성하다 보니 설정에 어려움이 있었다. 또한 팀원 중 한명이 브랜치를 생성하지 않고 메인을 통해 직접 수정을 하다 보니 이를 이해하고 되돌리는 과정에서 상당히 애를 먹었다. 

 

github에 먼저 레퍼지토리를 생성하였다. 선택지에 README 생성이 주어져 파일을 따로 만들 필요는 없었다. 이렇게 주어진 파일을 개인 브랜치를 생성하고, pull을 통해 로컬 저장소로 옮겨온 다음 수정 -> 커밋 -> push를 통해 병합을 시도하였다. 테스트를 해 본다고 개인 브랜치와 로컬 main 브랜치를 움직이며 push, pull, merge를 하다 보니 소스트리에서 이것이 어느 브랜치인지 헷갈려 하는 듯하였는데, 그래서 자주 에러가 났다. 심지어 main과 origin/main의 위치도 서로 제각각이었다. 로컬 main 브랜치를 제일 초기 상태로 초기화하고 나서야 개인 브랜치의 커밋과 push가 가능했다. 

 

이전 미니 프로젝트 시에는 push한 정보를 병합하는 것은 레퍼지토리 관리자가 담당해서 진행했는데, 따로 설정을 해야 했는지 팀원들이 스스로 push 및 병합까지 완료한 모습이었다. 추후 관리가 필요하게 될 경우 병합 시 허가 요청을 하는 설정을 켜서 활용해야겠다는 생각이 들었다.

 

문제는 위 설정을 한번 켜 본적이 있었는데, 레퍼지토리의 소유자인 계정은 분명 내 계정이었는데, 내가 push한 내용조차도 병합 시에는 허가가 필요하다는 경고 문구가 나왔다. 기능을 위해 내가 켰던 설정이 잘못된 설정인 듯하였는데, 약간 딴소리지만 그 설정을 확인해보니 병합에 필요한 허가의 숫자도 정할 수 있었던 것을 확인할 수 있었다.

 

SourceTree는 잘 사용하지 않을 수도 있다고 하는데, IntelliJ, VS code 등에서 동일한 기능을 제공하고 있는 확장 프로그램이 있으며, git 명령어를 주로 사용하기에 이들을 연습해 보는 것도 좋을 것이라는 이야기를 들었다.