본문 바로가기
레거시

2022-02-14의 기록

by GroovyArea 2022. 2. 14.

▶ 오늘 실현 가능한 세부 목표

 

=>  공부 관련

 

1) 배운 내용 복습

2) G.C 및 JVM 동작 원리 완전 이해

3) primitive type & reference type 차이점 확실히 외우기 (타입의 대한 차이)

4) 객체지향이 확실히 뭔지 (말로 설명 가능해야함.)

5) 객체지향의 요소(4가지) => 예시를 들어 설명 가능하게

6) 자바의 정석 객체지향 프로그래밍 1 

 

수업 공부 관련

 

=> AJAX를 이용하여 db에 바로 접근 가능하게 할 수 있다.

=> 검색창 유사 검색어 기능은 suggest 기능도 생각할 수 있다.

=> ajax 제이쿼리 속성에서 dataType : "json"일 경우 자동으로 자바스크립트 객체로 만든다 하지만 다른 파일(xml)을 불러올 시 에러코드 200 발생. (요청 웹프로그램의 응답결과 형식과 dataType 속성값이 맞지 않을 경우 에러코드(200) 발생

=> JQeury find() 메소드 : 하위 엘리먼트를 찾는 함수

=> each() 메소드 : 찾은 엘리먼트들을 하나씩 반복처리하는 함수

=> JQuery는 묵시적 반복이 있음.

=> AJAX는 기본적으로 비동기식 통신이므로, 동시에 작업을 할 수 있다. 입력 값 검증이 실패하여도 동시에 submit 이벤트가 발생될 수 있다. 이러한 특수한 경우에는 동기식으로 할 필요가 있다.

=> async 속성 : 비동기식 통신 여부 결정 변수 boolean 값 (false : 동기식 , true : 비동기식)

 

 개인 공부 관련

 

1. G.C 관련

-  Young Generation 에서  Reachable 상태를 유지하여 살아남은 객체는 Old Generation으로 복사되어 저장된다고 한다. 

=> 문제 : 하지만 어느 시점에 살아남았는지 알고 복사될까? 

=> 해답 : Young Generation 에서 최초로 eden 공간에 객체가 생성된다. 후에 살아남은 객체는 survive 1 영역으로 이동 되고 또 후에 살아남은 객체는 survive2 영역으로 이동하여 살아남은 객체는 이 시점에 Old Generation으로 복사되어 계속 사용될 시 Young Generation을 참조하게 된다.

 

2. Wrapper 클래스 관련

-  참조 타입도 연산이 가능하다

=> 문제 : 어떤 이유로 가능할까? 나는 기본 타입만 가능한 걸로 알고 있다.

=> 해답 : jdk 1.5 이전에는 참조형간의 연산이 불가능했다. 오토박싱, 언박싱이 나와서 컴파일러가 자동으로 변환하는 코드를 넣어주어 참조형간의 연산이 가능해졌다.

 


2. 클래스와 객체

  • 클래스의 정의 : 객체를 정의해 놓은 것
  • 클래스의 용도 : 객체를 생성하는데 사용된다
  • 객체의 정의 : 실재하는 것, 사물 또는 개념
  • 객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름
  1. 객체의 구성요소 - 속성과 기능
  • 속성(property) : 멤버변수, 특성, 필드, 상태
  • 기능 : 메서드, 함수, 행위

3. 변수와 메서드

  • 변수의 종류는 변수의 선언된 위치로 나눠진다.
  1. 클래스 변수 : static 키워드를 사용하며 모든 인스턴스가 공통된 저장공간(변수)를 공유하게 된다. 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야 하는 속성의 경우 선언. 클래스가 메모리에 로딩될 때 생성되어 프로그램이 종료될 때까지 유지. public을 붙이면 전역변수의 성격을 갖는다.
  2. 인스턴스 변수 : 클래스 영역에 선언, 클래스의 인스턴스를 생성할 때 만들어진다. (인스턴스 선언이 먼저), 독립된 저장공간, 서로 다른 값을 가질 수 있음. 인스턴스마다 고유한 상태를 유지해야하는 경우 인스턴스 변수로 선언.
  3. 지역 변수 : 메소드 내에서만 사용 가능. 메소드 종료 시 소멸됨. 블럭 내에서 사용 가능

⇒ 인스턴스 변수는 인스턴스가 생성될 때 마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만, 클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므로, 항상 공통된 값을 갖는다.

  • 메소드
  1. 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것, 수학의 함수와 유사
  2. 내부적으로 어떤 과정을 거쳐 결과를 만들어내는지 전혀 몰라도 됨.
  • 메소드를 사용하는 이유
  1. 높은 재사용성 : 몇 번이고 호출 가능 및 다른 프로그램에서 사용 가능.
  2. 중복된 코드의 제거 : 유지보수에 효율적
  3. 프로그램의 구조화
  • 메소드의 선언과 구현
  1. return 문 : 현재 실행중인 메서드를 종료하고 호출한 메소드로 되돌아간다. 이 값의 타입은 메소드의 타입과 동일함, 매개변수의 개수와 달리 출력 값은 하나만 반환 가능. 반환 타입이 void인 경우,return 문이 없어도 되지만, 컴파일러가 자동으로 추가해줌.
  2. ⇒ 반환 값에서 수식을 작성할 수 있다.
  3. ⇒ 매개변수의 유효성 검사 : 매개변수가 유효하지 않은 경우 프로그램이 비정상적으로 종료된다. 매개변수의 유효성 검사는 정말 중요한 부분이다.
  4. 인자와 매개변수 : 메소드를 호출할 때 괄호() 안에 지정해준 값들을 ‘인자’(argument), 인자의 개수와 순서는 호출된 메소드에 선언된 매개변수와 일치해야 함. 인자가 매개변수로 복사될 때 자동 형변환이 가능하여야 한다.

JVM의 메모리 구조 정리

  1. 3가지 주요 영역(method area, call stack, heap) 영역
  2. 메소드 영역 : 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(.class)를 읽어서 분석하여 클래스에 대한 정보(데이터)를 이곳에 저장함. 이때 클래스의 클래스 변수도 이 영역에 함께 생성됨.
  3. : 인스턴스가 생성되는 공간, 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 즉, 인스턴스변수(instance variable)들이 생성되는 공간이다.
  4. 호출스택 : 호출 스택은 메소드의 작업에 필요한 메모리 공간을 제공한다. 메소드가 호출되면, 호출스택에 호출된 메서드를 위한 메모리가 할당되며, 이 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연 산의 중간결과 등을 저장하는데 사용됨, 작업이 종료될 시 할당되었던 메모리공간은 반환되어 비워진다.

기본 형 매개변수와 참조형 매개변수

  1. 기본형 매개변수 : 변수의 값을 읽기만 할 수 있다.(read only) ⇒ 값의 복사만 가능
  2. 참조형 매개변수 : 변수의 값을 읽고 변경할 수 있다.(read & write) ⇒ 객체의 주소를 참조하기 때문에 주소의 복사 및 변경 가능
  3. 매개 변수가 배열인 경우 참조변수 이므로 값의 변경이 가능하다.

참조형 반환타입

  • 반환타입이 참조형이라는 것은 메서드가 객체의 주소를 반환하는 것을 의미함.

클래스 메서드(static 메서드)와 인스턴스 메서드

  • 클래스를 정의할 때 어느 경우에 static을 사용해서 클래스 메서드로 정의해야 할까?
  • ⇒ 인스턴스와 관계없는 메서드를 클래스 메서드로 정의한다.
  1. 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
  2. 클래스 변수(static 변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.
  3. 클래스 메서드(static 메서드)는 인스턴스 변수를 사용할 수 없다.
  4. 메소드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다. ⇒ 메소드 호출시간이 짧아지므로 성능 향상.
  • ⇒ 결국 인스턴스 생성과 존재 여부에 따라 인스턴스 메소드, 변수의 호출 가능 여부가 달라진다.

4. 오버로딩

  • 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것
  • 메소드 이름이 같아야 한다.
  • 매개변수의 개수 또는 타입이 달라야 한다.

5. 생성자

  • 생성자는 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드
  • 인스턴스 변수의 초기화 작업에 주로 사용, 인스턴스 생성 시에 실행되어야 할 작업을 위해서 사용
  • 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다.
  • 기본 생성자가 컴파일러에 의해서 추가되는 경우는 클래스에 정의된 생성자가 하나도 없을 때 뿐.
  • 생성자의 이름으로 클래스 대신 this를 사용함
  • 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.
  • this : 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다. 모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재한다.
  • this(), this(매개변수) 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용된다.

6. 변수의 초기화

  • 지역변수는 사용하기 전에 반드시 초기화해야 한다.
  • 멤버변수(클래스변수와 인스턴스변수)와 배열의 초기화는 선택적이지만, 지역변수의 초기화는 필수적이다.
  • 변수의 초기화 방법
  1. 명시적 초기화 : 선언과 동시에 초기화하는 것
  2. 생성자
  3. 초기화 블럭 : 인스턴스, 클래스 초기화 블럭 static{ } , { }
  • 인스턴스 변수는 인스턴스 생성 시마다 초기화, 클래스 변수는 처음 클래스가 로드되고 끝.

파이널 프로젝트 관련

1. 어떤 사이트를 만들 것인가

2. 팀 이름 구상 (금욜)

3. 기술 스택은 기본으로 (미정)

4. 협업 버전 관리 도구는 깃

5. 디버깅 방식 공부하기

 

반응형

'레거시' 카테고리의 다른 글

2022.02.15의 기록  (0) 2022.02.15
2022.02.14 (개념 정리)  (0) 2022.02.15
2022-02-13의 기록  (0) 2022.02.13
2022-02-11의 기록  (0) 2022.02.13
2022.02.10의 기록  (0) 2022.02.10