[플레이데이터 풀스택 백엔드 9기] 2주차 - Java

FerryLa·2025년 4월 1일

서론

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를 통하여 개념 확립
profile
김지환

1개의 댓글

comment-user-thumbnail
2025년 4월 2일

수업시간에 따라가지 못하는 부분은 당연히 있을 수 있어용! 넘 걱정 마셔요 ㅎㅎ
100% 이해하고 넘어갔다고 하면 오히려 제가 상담을 시도했을겁니다 ㅋㅋㅋ 원래 6개월동안 계속 반복하고 프로젝트를 통해 경험하며 얻는 것들이 상당하기 때문에 걱정 않으셔도 되어요!
매일 열심히 학습에 임해주시고, 남아서 추가 학습까지 진행해주는 모습들을 기억하고 있겠습니다~!
항상 화이팅! 그리고 일교차가 심하니 건강도 잘 챙기시구요!!

답글 달기