dev-course day3

2rlokr·2025년 3월 6일

dev-course

목록 보기
3/43

오늘 배운 것

제어문

명령의 흐름을 제어하는 데 사용되는 문법
프로그램의 실행 순서를 제어하는 데 쓰이는 문법

선택문 (Selection Statement)

주어진 조건에 따라서 서로 다른 코드를 실행하기 위해 사용
프로그램의 실행 흐름을 제어하기 위해 특정 조건을 검사한 후, 그 결과에 따라 실행할 코드 블록을 결정하는 데 사용

if

if문은 주어진 조건이 참일 경우에만, 코드블럭의 명령을 수행하는 제어문

if - else

if-else 문은 주어진 조건이 참일 경우에는 if문에 해당하는 코드블럭으로, 그렇지 않은 경우에는 else문에 해당하는 코드블럭의 명령을 수행하는 제어문

if - else if - else

여러 개의 조건을 순차검사 후 참이 되는 첫 번째 조건의 코드블럭 만을 수행한다.참이 중복되더라도 나머지 조건절은 검사하지 않는다.

switch

하나의 변수 또는 값에 대해 같은 값과 같은 경우(case)를 찾고, 같은 경우의 코드블럭을 실행

switch () {
	case1 :
    	명령문;
        
    case2 : # 값이 여러 개가 참일 때는 참인 case 모두 실행한다.
        명령문;
        ...
    default : # 모든 case 불일치시 명령 수행
    	명령문;
}

반복문 (Loop Statement)

어떠한 명령을 반복적으로 수행할 수 있도록 마련된 기능
반복문의 조건절이 참일 때, 반복하고 거짓일 때, 중단한다.

while

조건절 부분이 참일 때까지는, 코드블럭에 해당하는 부분을 반복적으로 수행한다.

for

반복 변수 초기화 (Initialization), 반복 조건 (Condition), 반복 변수 갱신(Update)을 조건식에서 수행하는 반복문

do while

조건식 부분의 참거짓 여부와 관계없이 do 코드블럭의 코드가 한 번은 수행되도록 보장한다.그 후, while의 조건식 부분의 참거짓 여부를 검사한다.

do {
	명령문;
} whlie (조건식);

분기문 (Branching Statement)

명령의 흐름을 제어하여 특정 코드 블록으로 이동하거나 반복문을 종료하는 등 이전의 제어문들과 마찬가지로 명령 흐름의 분기를 생성할 수 있는 문법

break

반복문 혹은 switch문을 즉시 종료한다.

continue

반복문에서 사용되며, 조건에 따라 해당 키워드를 만났을 경우에만, 반복을 건너 뛴다. 반복을 건너뛰고 조건식으로 회귀

함수

함수(Function)는 프로그래밍에서 특정 작업을 수행하거나 값을 계산하기 위해 고안된 독립적인 기능의 단위이다. 함수는 반복적인 코드 작성을 피하고, 코드의 재사용성을 높이며, 프로그램의 가독성과 유지보수성을 향상시킨다.

함수 (Function)

접근제어자 반환자료형 함수이름 (매개변수, ...) { # 정의부
	명령문;							   # 구현부
}

호출 (Call)

메서드를 사용하는 것

[함수가 정의되어있는 클래스이름.]함수_이름(인자, ...);

함수 구성요소

  • 함수 정의부 : 접근제어자 반환자료형 함수이름 (매개변수,...)

접근제어자 (Access Modifier)

접근자클래스 내부패키지상속받은 클래스이외의 영역
defaultOOXX
publicOOOO
privateOXXX
protectedOOOX

반환자료형

return

함수에서 도출된 결과를 원래 있던 곳으로 돌려 보낼 때 사용하는 키워드

매개변수 (Parameter)

변수 자료형 변수이름1, 변수 자료형 변수이름 2 ...

인자 (Argument)

함수이름.(인자1, 인자2, ..);
함수를 호출할 때, 매개변수로 인자를 보내줘야 한다.
매개변수와 개수, 자료형을 맞춰줘야 한다.

오버로딩 (Overloading)

오버로딩(Overloading)은 같은 이름을 가진 메서드를 여러 개 정의할 수 있는 기능을 의미한다. 이는 Java에서 메서드 이름이 동일하더라도 매개변수의 타입이나 개수, 순서가 다르면 서로 다른 메서드로 간주한다. 즉, 오버로딩을 구현하기 위해서는 메서드의 이름이 같으면서도 매개변수의 개수나 타입, 순서가 달라야 한다. 반환 타입만으로는 메서드를 오버로딩할 수 없다.

메서드 시그니처

메서드 이름과 매개변수를 합쳐서 메서드 시그니처라고 부른다.

public class Calculator {
	public int sum(int a, int b){
    	return a+b;
    }
    
    public int sum(int a, int b, int c) {
    	return a+b+c;
    }
    
    public double sum(double a, double b){
    	return a+b;
    } # return 타입이 달라도 메서드 시그니처가 다르기 때문에 오버로딩 !
}

메서드 시그니처가 다르다면 같은 이름의 메서드를 생성할 수 있다.

OOP와 자바

패러다임 (Paradigm)

인식의 체계, 사물에 대한 인식이나 생각의 틀, 체계

프로그램을 만드는 데에도 패러다임이 있다.

객체지향 패러다임 (Object Oriented Paradigm)

  • 소프트웨어 개발의 패러다임
  • 자바가 객체지향 패러다임을 따라가는 대표적인 프로그래밍 언어
  • 프로그램을 객체(Object)라는 기본 단위로 구성하고 문제를 풀어나간다.

객체 지향 프로그래밍에는 네 가지 특징이 있다.
1. 캡슐화 (Encapsulation)
2. 상속 (Inheritance)
3. 다형성 (Polymorphism)
4. 추상화 (Abstraction)

추상화

  • 필요한 정보만 남기고 세부사항을 감추는 것
  • 복잡한 시스템의 중요한 내용은 보여주고, 불필요한 세부 사항은 숨기는 원칙
  • 객체가 공통적으로 수행할 수 있는 기능을 정의하고, 이 기능에 대한 세부 사항은 숨긴다. Java에서는 추상 클래스 (abstract class)와 인터페이스(interface)를 통해 추상화를 구현한다.

EX) 전화하는 것, 문자 보내는 것 어떻게 되는 건지 알고 보내는가? NO!
사용자 인터페이스만 보게 된다.

  • 추상 클래스는 일부 메서드가 구현되지 않고, 서브 클래스에서 이 메서드를 구현해야 하는 클래스를 의미한다.
  • 인터페이스는 메서드의 시그니처만 정의하고, 실제 구현은 이를 구현하는 클래스에서 제공된다.
  • 추상화를 통해 시스템의 복잡성을 줄이고, 시스템을 보다 직관적으로 모델링할 수 있다.

캡슐화

  • 객체의 데이터와 그 데이터를 처리하는 메소드를 하나로 묶어서 외부로부터 객체의 내부 구현을 숨기는 원칙
  • 객체의 상태(데이터)는 외부에서 직접 접근하거나 변경할 수 없으며, 객체가 제공하는 공용 메서드를 통해서만 데이터를 조작할 수 있다.
  • 데이터의 무결성을 유지하고, 객체의 내부 구현을 변경하더라도 외부 코드에 미치는 영향을 최소화한다.
  • private, protected, public 과 같은 접근 제어자를 활용해 구현하고, 메서드를 보호
  • getter, setter을 사용하는 이유도 동일
    - getter는 열려있고, setter가 닫혀있으면 => 읽기 전용이라고 부른다.
  • 객체의 세부 사항을 은닉하고 외부 인터페이스만을 통해 상호작용하도록 한다.

오늘 잘한 점

오늘은 수업도 잘 따라가면서 배운 내용도 잘 정리할 수 있었던 것 같다.
확실히 강의 자료를 미리 조금 보는 것이 도움이 되는 것 같다.

고민

강사님께서 알고리즘 문제를 어떤 언어로 풀고 있냐고 여쭤보셔서 다른 분들의 답도 좀 보게 되었는데, 백엔드를 준비하시는 분들이라 그런가 확실히 자바가 많았다. 나도 자바로 했었지만 확실히 쓰다보니 코테는 파이썬이 편해 파이썬으로 공부를 했다. 하지만, 분명 특정 기업에서는 백엔드는 자바로 언어를 지정해주기도 하고 스터디도 자바 언어로 하기로 해서.. 자바를 공부해야 할 것 같은데... 파이썬의 메리트를 포기하기가 고민된다.
학교 선배들은 파이썬으로 준비하고, 강력 추천하던데 후.. 어렵다 !!!
우선 스터디를 하기로 했으니 자바로 알고리즘을 공부해야 할 것 같다. 거기에 개인적으로 파이썬도 연습해야겠다. 그럴 여유가 되겠지..?

느낀 점

오늘도 무사히.. 잘 끝냈다. 아직 3일찬데 벌써 배운 내용은 엄청 많은 것 같다. 그리고 마지막에 객체 지향 프로그래밍을 들어가기 시작했는데, 잘 이해할 수 있겠지..? 학교에서 수업을 들을 때도 이 객체 지향의 특징 4가지가 또 추상적이라 이해하는 것이 쉽지 않았는데, 이번엔 더 제대로 이해해서 헷갈리지 않도록 해야지 ! 3일차에 이렇게 진도가 쭉쭉 나가니까 복습을 제대로 안 하면 또 나중엔 과부화 올 것 같다 ㅎ.. 그러니 미리미리 복습하고 정리해야 할 것 같다 ! 하루 하루 차근차근 TIL과 노력을 차곡차곡 쌓아야겠다 파이팅 !!!!

0개의 댓글