상세 컨텐츠

본문 제목

프로그래머 도전기 24일차

프로그래머가 될거야!

by Choyee 2023. 9. 21. 23:57

본문

오늘은 

오늘은 처음부터 배웠던 것들을 다시 복습하는 시간을 가져보았습니다

정말 아무것도 모르고 처음 접했을 때의 느낌과는 너무도 많이 달랐습니다

아 이게 이거였구나 하면서 바로바로 이해도 되고

헷갈렸던 개념들을 다시 한번 정리를 해가면서 지금까지 막무가내로 사용했던

코드들과 규칙들을 조금은 더 정확하게 이해할 수 있게 된것같습니다

내용이 생각보다 많아서 오늘 하루만에 다 복습하지는 못 했는데

다시한번 기초 개념을 잘 다져서 이후에 정확히 알고 쓸 수 있도록 해볼 생각입니다

 

JAVA 수업

인터페이스

에러(Erro)와 예외(Exception)

에러 = 하드웨어적인 오작동
예외 - 개발자 = 잘못된 코딩으로 인한 오류
      - 사용자 = 잘못된 조작으로 인한 오류
      = 소프트웨어적인 오류
      = 해당 프로그램이 비정상적으로 정지됨

예외의 종류 
일반 예외 = 실행전에 컴파일러가 체크해 줌(알려줌)
실행(RunTime) 예외 = 실행했을 때 오류 발생 -> 개발자의 경험이나 예측으로 예외 코드 작성

리소스 닫기
1. try ~ catch ~ finally 구문
   => close()를 finally안에 작성

2. try ~ with ~ resource문
    => close() 사용하지 않음(fianlly 생략)


throws 구문
- 예외처리를 미뤄놓음(연기함)
- 필요시 사용처에서 try ~ catch 해야 함

012

자료구조

배열
List(인터페이스) - ArrayList(클래스), Stack, Queue 
Set - 중복되지 않게 해줌  ---> Map
Map(인터페이스) - HashMap(클래스)

배열 => 배열의 크기에 맞춰서 데이터 삽입, 삭제
ArrayList = 삽입, 삭제 시 자동으로 배열의 크기가 늘어나고 줄어듬
               객체가 제거되면 바로 뒤 인덱스부터 앞으로 1씩 당겨짐
               순서가 있고 중복 데이터 허용됨
               add() get() set() remove() size() 등
               싱글쓰레드에서 사용

vector = 멀티쓰레드로 작업할 때 사용 -> 안전하게 객체를 추가, 삭제할 수 있음 
            하나의 스레드의 메서드가 실행 완료해야만 다른 스레드의 메서드가 실행됨
            ArrayList와 동일한 자료구조를 가지고 있다

01

collection자료구조
- 프레임워크(라이브러리)
- Data Structure = 자료 관리
interface Collection


Set(인터페이스) - HashSet
= 순서가 없고, 중복 불허
HashSet ------> Map으로 발전
 - Set 인터페이스의 구현 클래스
 - 동일 객체, 동등 객체 중복저장X
 - 순서없이 저장
   -> (hashCode(),equals()를 사용해서 논리적으로 일치시킴
- add() get() set() remove() 

Map(인터페이스) - HashMap(구현 클래스)
- 키(key)와 값(value)의 쌍으로 저장
- 키는 중복저장 안되고, 값은 변경가능
- put(저장), contains(), get(), set()

0123

- ArrayList 회원관리 프로그램
1. Member 클래스 정의 - 자료형
2. MemberArrayList 클래스 - 회원 생성, 조회, 수정, 삭제 메서드를 관리
3. Main - 테스트 

- HashMap을 이용한 회원관리

ArrayList - 자료구조자체가 중복 허용 = 재정의 불필요
HashSet - hashCode(), equals() 재정의 필요
HashMap - 재정의 불필요. 되어있음

01

 

JavaScript 공부

boolean = 참, 거짓
실제 코드 값에 true, false를 적는다
 -> 소문자로 적어야 한다, 대문자로 적으면 에러남
 -> 간단하지만 널리 쓰임

타입을 변경하는 변수를 가질 수 있음 = Typescript

변수에 이름 붙이기
- 숫자는 쓸 수 있지만 숫자로 시작할 수는 없다
- 공백은 쓸 수 없다
- _ 언더바는 쓸 수 있다, _로 시작할 수도 있다

- 스네이크 케이스 = _언더바를 이용해서 단어들을 연결
                         -> current_date => 보통 사용하지 않음
- 카멜 케이스 = 변수의 첫 단어를 제외한 나머지 각 단어의 첫 문자를 대문자로 씀
                     -> currentDate => 보통 사용
- 변수 이름 앞에 is를 붙여 불리언 변수임을 알려줄 수 있다 = 의무는 아니지만 보통 그렇게 표현한다
- 보통 한글자 짜리 변수는 피하도록 한다


문자열 
- 인덱스, 길이
- undefined, null
- 문자열 메서드 (String Methods)
- String Template Literals 문자열 템플릿 리터럴
- Random Numbers and the math Object  무작위 숫자, math 객체

String
- 텍스트정보 = 글자로 된 줄
- 또 하나의 원시 타입으로 텍스트를 상징
- 문자열은 " " 따옴표로 감싸주어야 한다 = 문자열 작업 중임을 알리는 방법
   (' ' 작은 따옴표를 사용해도 된다 => 일관성만 유지해주면 됨, 섞어서 쓸 수는 없음 " ')
- boolean 처럼 JS 가 인식할 수 있는 것을 제외하고 -> 아무 문자나 입력하고 넘어갈 수 없다
- 문자열 안에는 공백을 쓸 수 있다, 원하는 문자 모두 가능, 숫자도 문자열로 가능

 

 

JAVA 복습

<<변수, 상수>>

1byte = boolean(논리)
2byte = short(정수) char(문자)
4byte = int(정수) float(실수)
8byte = long(정수) double(실수)

정수 = 자연수, 양의 정수 0, 음의 정수를 통틀어 정수라고 한다
실수 = 유리수, 무리수를 모두 포함하는 수
상수 = 변하지 않는 값

묵시적 형 변환 = 작은 수에서 큰 수로, 덜 정밀한 수에서 더 정밀한 수로 대입되는 경우 => 자동
명시적 형 변환 = 변환 되는 자료 형을 명시해야 함 => 자료의 손실이 발생할 수 있음


<<항, 연산자>>
항 = 연산에 사용되는 값
연산자 = 항을 이용하여 연산하는 기호

대입 연산자  a = b => 왼쪽 변수에 오른쪽 값을 대입

부호 연산자   +, - 

산술 연산자  a % b => 나머지를 구하는 연산자

증감 연산자 = 단항 연산자  ++, -- 
                => a = ++b => 먼저 b의 값을 1 증가시킨 후 그 값을 a에 대입 -> 바로 a의 값을 반환하면 b+1이 나온다
                     a = b++ => a에 b를 먼저 대입한 후 b의 값 1 증가 -> 바로 a의 값을 반환 하면 b가 나온다

관계 연산자 = 이항 연산자
               => 결과가 true, false 로 반환됨
               => a == b => 두 항의 값이 같으면 true, 다르면 false
                    a != b =>  두 항의 값이 같으면 false, 다르면 true

논리 연산자 = 관계 연산자와 혼합하여 많이 사용
               => a && b => 두 항이 모두 참인 경우에만 true
                    a || b => 두 항중 하나라도 참인 경우 true
                    a ! => 단항 연산자 -> true, false의 값을 반대로 바꿔준다

복합 대입 연산자 = 대입 연산자와 다른 연산자를 함께 사용
                      => +=, -=, *=, /=  => 왼쪽 항 기준 사칙연산을 하고 왼쪽항에 대입
                           %=  => 왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입

조건 연산자 = 삼항 연산자
               => 조건식 ? 결과1 : 결과2   => 조건식이 참이면 결과1을, 거짓이면 결과2를 반환 


<<조건문>>
if문 = if(조건식){
            수행문;
         }

if - else문 = if(조건식) {
                       수행문1;
                 }else { 
                       수행문2;
                 }

if - else if - else 문 = 하나의 경우에 조건이 여러개에 해당하는 경우
                         = if(조건1){ 
                                 문장 1; 
                             }else if(조건2){
                                  문장 2; 
                             }else if(조건3){
                                  문장3; 
                             }esle {
                                  문장4; 
                             }
                          => 하나라도 조건을 만족하게 되면 나머지 조건을 보지 않음

switch - case문 = 조건식의 결과가 간단한 정수, 문자열의 값일 때
                    = 입력 변수의 값과 일치하는 case 입력값이 있다면 해당 case문에 속한 문장 실행
                    = switch(입력변수){
                         case1 : 입력값1 = "문장1";
                                  break;
                         case2 : 입력값2 = "문장2";
                                  break;
                         case3 : 입력값3 = "문장3";
                                  break;
                         default : 입력값4 = "문장4";
                                  break;

                      break = 각 case 문들이 진행되다가 break에 도달하게 되면 swich문은 종료된다
                                 break문이 없다면 계속해서 다음 case의 문장들이 실행되므로 주의해야한다
                      default = 어떠한 case의 입력값과도 일치하지 않을 경우 실행된다
                                   오류를 줄여주는 역할, 있어도 되고 없어도 된다


<<객체 지향 프로그래밍>>
<클래스>
클래스 - 객체에 대한 청사진
           객체에 대한 속성, 기능 => 코드로 구현
           객체의 속성 = 특성, 속성, 멤버 변수
           객체의 기능 = 객체가 하는 기능들을 메서드로 구현 

= (접근 제어자) class 클래스이름 {
          멤버 변수;
          메서드;
    }

           객체란걸 만들기 위한 확장 가능한 템플릿(사용상의 형식)
           상태(멤버 변수), 동작(멤버 함수, 메서드) 구현에 대한 초기값을 제공

클래스의 생성자에 의해 객체가 생성 -> 결과 객체 = 클래스의 인스턴스
                                          객체의 특정 멤버변수 = 인스턴스 변수

객체 = 변수, 데이터 구조, 함수, 메서드 등이 될 수 있으며, 식별자가 참조하는 메모리의 값, 추상 데이터 유형
          클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것 => 데이터, 식별자에 의해 되는 공간을 의미
          객체에는 상태(데이터)와 동작(코드)이 있다
          변수를 이용해 객체에 접근 => 메모리가 할당되기 전까지는 객체는 존재하지 않는다

클래스의 객체 생성 = 클래스이름 객체로쓸변수의이름 = new 클래스이름();

클래스 변수 = 정적변수 라고도 한다
                  static을 사용하여 선언 => 전역변수로써의 개념을 가진다
                  클래스로부터 생성된 모든 객체들이 -> 클래스 변수를 공유
                  클래스변수는 하나의 클래스로부터 생성된 객체들 사이의 통신, 공통된 속성을 표현하는데 사용 가능
      일반 변수와 달리 객체이름을 통해 접근 불가 => 클래스이름을 통해서 접근

클래스 메인 함수 = java로 구현된 프로그램이 시작될 때 갖아 먼저 실행되는 메서드
                        자체에 의미가 있거나 특별한 기능이 있는것은 아니다
                        메인 함수에 붙어있는 static은 모든 객체가 공유하는 변수, 메서드를 의미 => 따로 객체를 생성하지 않고도 사용할 수 있다는 성질을 갖는다
                         => static을 붙여줌으로써 어떠한 객체가 main 메서드를 호출해주지 않아도 프로그램이 시작되면 자동적으로 메모리에 할당되고 가장 먼저 실행될 수 있도록 하는 것 

class = 대부분 대문자로 시작 
          여러개의 클래스가 같이 있는 경우 => public 클래스는 단 하나 = 그 클래스의 이름 = 자바 파일의 이름
          자바의 모든 코드 = class 내부에 위치

클래스의 기능 -> 메서드로 구현 = 멤버 함수라고도 한다
                      객체가 수행하는 기능을 구현


<메서드>
메서드 = 함수의 일종 => 하나의 기능을 수행하는 일련의 코드
            중복되는 기능이 있는 경우 함수로 구현 -> 함수를 호출하여 사용

함수의 정의 => 함수이름 = 함수의기능관련
                    매개변수 = 함수의 수행을 위해 필요한 변수
                    return = 함수 수행 결과 반환 예약어
                    함수반환형 = 반환 값의 자료형을 나타냄 -> 값을 return하지 않는 경우 함수이름 앞에 void를 붙여줌

지역변수 = 메서드 안에서 선언된 변수

멤버변수 = 메서드 밖에서 선언된 변수 => 접근제어자 를 제외하고는 일반 변수의 선언과 동일
               접근제어자 - public = 모든 클래스에서 접근 가능
                                private = 선언된 클래스 안에서만 접근 가능
                                protected = 선언된 클래스 안, 하위 파생 클라스에서만 접근 가능
                                (default)접근제어자 없이 선언된 멤버변수 = 같은 패키지 내의 클래스에서만 접근 가능

객체변수 = 객체가 가질 수 있는 특성을 표현
              객체 속성변수 = 자료형의 값을 가지는 변수 (public int b;)
              객체 참조변수 = 생성된 객체를 지정하는 변수 => 객체가 생성 저장된 주소를 가진다 (private MyClass myclass;)

함수 스택 메모리 = 함수가 호출될 때 사용되는 메모리 = 스택
                      => 함수의 기능 수행이 끝나면 자동으로 반환되는 메모리

<클래스, 함수>
클래스 vs 객체 vs 인스턴스
클래스 = 객체를 만들어내기 위한 설계도
객체 = 구현할 대상, 설계도로 구현한 모든 대상 => 모든 인스턴스를 대표하는 포괄적인 의미
인스턴스 = 구현된 구체적인 실체 => 객체를 소프트웨어에 실체화 하면 인스턴스라고 부른다 => 메모리에 할당된다
               인스턴스는 객체에 포함된다고 할 수 있다

하나의 클래스 코드 -> 여러개의 인스턴스 생성 가능
                              -> 인스턴스 -> 힙 메모리에 생성 => 힙 메모리에 생성된 인스턴스는 자동으로 삭제되지 않음
                              -> 각각의 인스턴스 = 다른 메모리에 다른 값을 가짐

메서드 = 변수X => 명령어 집합 = 힙 메모리에 생성

참조 변수 = 메모리에 생성된 인스턴스를 가리키는 변수
참조 값 = 생성된 인스턴스의 메모리 주소 값

 

메모리 영역 - Heap 영역 = 인스턴스 변수(Instance variable)
                               = 클래스 영역에서 static이 아닌 변수
                               = 인스턴스가 생성될 때 생성 -> 인스턴스 소멸시 소멸
               - Static(Method) 영역 = 클래스 변수(Static variable)
                                              static 키워드가 붙고 여러 객체에서 공통으로 사용할 때 사용 - 클래스 영역
                                              클래스가 메모리에 올라갈때 생성 -> 프로그램 종료시 소멸
                                  * 클래스변수, 인스턴스 변수 = 전역변수, 멤버변수, 필드 => 셋 다 같은 뜻
               - Stack 영역 = 지역 변수(Local variable)
                                  메서드 내부에서 선언됨, 초기 값을 지정해야 사용 가능
                                  블록 내에서 변수의 선언문이 실행 될 때 생성 -> 블록을 벗어날 대 소멸

 

 

2023. 09. 21 (목)

관련글 더보기