서론
2주차 - Java (03/24 ~ 03/31)
자바 강의와 문제풀이를 통해 자바 기초 문법과 코드 전반에 대한 이해에 집중한 한 주였습니다.
1. 수업 내용 정리
[Java]
자바는 연산의 방향은 왼쪽에서 오른쪽, 대임은 오른쪽에서 왼쪽으로 한다.
자바는 항상 변수의 값을 복사해서 대입한다
접근 제어자
- public : 어디서나 접근 가능
- protected : 상속관계이거나 같은 패키지에서 접근 가능
- default : 같은 패키지에서 접근 가능
- private : 같은 클래스 내부에서만 접근 가능
- void : 리턴값 없음
오버플로우(Overflow)
byte num1 = 126;
num1++; // 127 후의연산자
System.out.println("num1 = " + num1);
num1++; // 127
System.out.println("num1 = " + num1);
num1++; // -128
System.out.println("num1 = " + num1);
제어문
- 조건문 : if, if-else, if-else if, switch
- 반복문 :for, while, do-while, 중첩 반복 가능
- 분기문 : break(반복 종료) / continue(다음 반복으로 건너뜀)
배열의 복사
- 얕은 복사(shallow copy) : stack 의 주소값만 복사, 원본을 공유 할 목적
- 깊은 복사(deep copy) : heap의 배열에 저장된 값을 복사, 원본과 사본을 분리하여 관리 할 목적
클래스와 객체
- 클래스 : 객체를 만들기 위한 설계도
- 객체 : 클래스로부터 생성되며 new 연산자를 통해 생성
객체지향프로그래밍(OOP: Object Oriented Programming language)
- 캡슐화, 상속, 추상화, 다형성를 적용하여 유지보수성을 고려한 응집력 높고 결합도 낮은 객체 위주의 개발방식을 적용한 프로그래밍을 말한다.
- 응집력 : 관련 있는 기능끼리 한 데 뭉쳐 정리한 것
- 결합도 낮음 : 각 객체가 자유롭게 분리되고, 독립적으로 작동 가능한 상태
캡슐화(Encapsulation)
- 캡슐화는 유지보수성 증가(낮은 결합도)를 위해 필드의 직접 접근을 제한하고, public 메소드를 이용하여 간접적으로 접근하여 사용
- 필드에 직접 접근하지 못하도록 private 접근 제어자 사용
- 만약 필드에 직접 접근하면 잘못된 값도 들어갈 수 있음
추상화(Abstraction)
- 추상화는 현실세계의 복잡한 사건을 단순화하여 새로운 객체 지향 세계를 창조해나가는 과정
- 중요한 것만 드러내고, 불필요한 세부사항은 숨기는 것
암묵적인 규칙
- 변수/메서드: 낙타 표기법(camelCase), 동사형
- 클래스: 첫글자 대문자, 명사형
- 상수: 대문자 + 언더스코어 (ex. MAX_COUNT)
- 가독성과 유지보수를 고려해 이름 설정
[Linux]
리눅스 기초
- 리눅스는 유닉스(Unix)를 기반으로 만들어진 오픈 소스 운영체제(OS)
- GUI - 그래픽 기반 사용자 인터페이스
- CLI - 명령줄 인터페이스

- 쉘(Shell) : 사용자와 운영체제 간의 중간 계층을 형성하는 프로그램 또는 환경
- 커널(Kernel) : 하드웨어 자원인 CPU나 메모리, 디스크, 네트워크 장치에 접근하고 제어하는 역할
즉, 하드웨어의 인터페이스를 담당
CLI 명령어
[계정 명령어]
sudo su : /root 경로의 디렉토리
su <계정명> : 계정
sh / bash : 쉘로 바꾸기 / bash 쉘 실행
[업데이트]
sudo apt update : 업데이트
sudo apt install <패키지명>` : 패키지 설치
[주요 명령어]
pwd : 현재 디렉토리 경로 출력 (Print Working Directory)
ls : 파일/폴더 목록 보기 (-l, -a 옵션 자주 사용)
cd [폴더명] : 디렉토리 이동 (..: 상위 폴더, ~: 홈 디렉토리)
mkdir [폴더명] : 새로운 폴더 만들기
rmdir [폴더명] : 빈 폴더 삭제
rm -r [폴더명] : 폴더 및 하위 내용 삭제
touch [파일명] : 빈 파일 생성
cp [원본] [대상] : 파일 복사
mv [원본] [대상] : 파일 이동 or 이름 변경
rm [파일명] : 파일 삭제
find [경로] -name [파일명] : 파일 위치 찾기
2. 문제 풀이
Java - Math.random을 이용한 가위바위보, static에 대한 이해
풀이 : Math.random으로 1~3의 3개 난수 생성(int로 캐스팅하여 정수로 반환)
String으로 반환하기 위해 return 값에 String 구문으로 출력 연산
그리고, static은 프로그램 종료까지 남기에 Application 클래스에서 new연산자 생성 없이 바로 호출


static에 대한 이해
- 프로그램이 시작할 때 초기화되고, 프로그램이 종료될 때까지 유지됨
- 초기화는 한 번만 하고, 상태를 유지하고 싶기 때문
- static에 대한 내용은 필수적인 부분은 빼고 잘 사용하지 말라는 것은 오버플로우 가능성이 있기 때문
ps. 강사님 강의 내용과 ChatGPT 활용하여 개념이해
3. 마무리
> 해결된 부분과 아쉬웠던 점
수업 시간에 모르는 부분은 체크해두고, task식으로 질문하였더니 일정 부분 해결됐습니다.
그래도, 아직 수업시간을 따라가지 못하는 부분이 존재한다고 생각합니다.
> 개선할 점
저번 주와 동일하게 task관리와 컨디션 조절에 초점을 맞추도록 하겠습니다.
> 다음주 계획
- 지난 MySQL 문제풀이 해결
- JAVA 문제풀이 및 조원과 study를 통하여 개념 확립