클래스 로더 → JVM 내의 런타임 데이터 영역 배치 → 실행 엔진이 바이트코드 실행 바이트코드 = OpCode (1byte) + 추가 피연산자 실행 엔진 ▶ OpCode 하나를 가져와 피연산자와 함께 작업을 수행 → 반복 ▶ 바이트코드를 실제로 기계가 실행할 수 있는 형태로 변경해야 하는데, 두 가지 방식이 있음. - 인터프리터 > 바이트코드 명령어를 하나씩 읽어서 해석하고 실행 > 하나하나의 해석은 빠르지만, 인터프리팅 결과의 실행은 느림 - JIT (Just-In-Time) 컴파일러 > 인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 전체를 컴파일하여 네이티브 코드로 변경, 이후에는 더 이상 인터프리팅하지 않고 네이티브 코드로 직접 실행 > 네이티브 코드는 캐시에 보관하기에 한 번 컴파일된 ..
런타임 데이터 영역(Runtime Data Area) ▶ PC Register - 스레드 시작될 때 생성- 현재 수행중인 JVM 명령 주소 갖음.▶ JVM Stack- 스레드 시작될 때 생성- 스택 프레임 저장 및 추가, 제거- 예외 발생 시 printStackTrack() 등의 메소드로 보여주는 Stack Trace의 각 라인은 하나의 스택 프레임 표현- 지역 변수도 스택- 객체 레퍼런스 변수도 스택 ( 변수만!! 실제론 힙에 들어있음 ) * 스택 프레임 ?- 메소드 수행 시 하나의 스택 프레임 생성 → JVM 스택에 추가 → 메소드 종료 → 스택 프레임 제거- 지역 변수 배열 : 0부터 시작하는 인덱스를 가진 배열- 피연산자 스택 : 메소드의 실제 작업공간, 각 메소드는 피연산자 스택과 지역변수 배열..
자바 코드 수행 과정을 보면 이렇다.테두리 친 부분이 JVM 영역이고 하나씩 봐야겠다. 클래스 로더(Class Loader)▶ 특징 1) 계층구조 : 클래스 로더끼리 부모-자식 관계를 이루어 계층구조 (최상위 = 부트스트랩) 2) 위임모델 : 클래스 로더끼리 로드 위임 (상위클래스 로더 확인 → 상위클래스 있다면 해당 클래스 사용) 3) 가시성 제한 : 하위 클래스 로더는 상위클래스 로더의 클래스를 찾을 수 있지만 상위는 하위를 찾을 수 없음. 4) 언로드 불가 : 클래스 로더는 클래스 로드만 가능 (but 현재 클래스 로더 삭제 → 새로운 클래스 로더 생성하는 방법으로 사용)▶ 로드된 클래스들을 보관하는 네임스페이스 갖음.▶ 클래스 로드 시 이미 로드된 클래스인지 확인 위해서 네임스페이스에 보관된 FQ..
getter and setter를 만드는건 쉽다.123456789101112131415public class UserVO { private String userId; private String userNm; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getUserNm() { return userNmId; } public void setUserNm(String userNm) { this.userNm = userNm; }Colored by Color Scriptercs1. 직접 get / set 타이핑.2. 마우스 우클릭 → Sourc..
JDBC / DBCP / JNDIJAVA에서 DB Connection 하기 위해 사용하는 것들학원 + 개인 포트폴리오 작업 등을 할 때는 JDBC만 사용해서 다른 존재를 몰랐는데실무에서는 DBCP, JNDI를 사용해 DB와 연결했다.어떤 차이들이 있을까? JDBCDB에서 정보를 가져올 때마다 DB 연결을 열고 닫고 함.각 페이지에 DB 통신이 필요한 부분이 있으면 DB 객체 생성, Connection, Disconnection속도 저하, 효율 떨어짐. DBCP어플리케이션 시작시 필요한 만큼 Connection 객체 만들어 Pool에 넣어둠.필요할 때마다 갖다 쓰고 Pool에 반납.어플리케이션 소스단에 설정. JNDIWAS단에 설정WAS에 네이밍된 커넥션 풀을 가져옴 (이름으로 DB 연결)JDBC로 url..
이 그림 하나면 끝! Forward클라이언트 → 서버(Resource1 → Resource2) → 클라이언트이 때 클라이언트는 서버로 요청한게 Resource1이니깐 URL은 Resource1.하지만 forward 처리를 했다면 클라이언트에 보여지는 화면은 Resource2HttpServletRequest와 HttpServletResponse로 데이터 주고받기 가능 Redirect클라이언트 → 서버(Resource1) → 클라이언트 → 서버(Resource2) → 클라이언트정직하게 요청한 URL에 대한 결과만 보여줌.RedirectAttributes를 활용해 데이터 전송가능
REST API 써서 포트폴리오도 만들어보고, 여기저기 구글링하며 많이 접해본 그 'REST'하지만 막상 'RESTful이 뭐야?' 라고 물으면 말할 수 없는 비밀이 되버린다.말할 수 없다면 안써본거나 진배없기에 정리를 해본다. Learn REST ▶ 소프트웨어 아키텍처의 한 형식* 소프트웨어 아키텍처 : 간단히 말하면 설계 (아키텍처가 필요한 이유, 역할 등 조금 더 자세한 정보는 여기서 확인 가능) ▶ 인터넷 콘텐츠를 소비할 수 있는 장비나 프로그램이 다양해지면서(안드로이드, IOS, 크롬, 익스플로러 등등) 서버와 클라이언트가 1:N의 관계가 됨. 따라서 하나의 서버로 여러 클라이언트를 대응할 수 있도록 할 수 있는 아키텍처가 바로 REST ▶ RESTful하다 혹은 RESTful 형식이라고 하는 ..
- new 연산자로 객체를 생성한만큼 객체에 메모리가 생성됨.- 변수 : 생성자와 메소드 내에서만 사용- Field : 객체와 함께 존재, 객체 고유 데이터 --> 초기값 생략 가능 (생략하면 기본 초기값으로 자동 설정) --> 초기화 할 때 public Korean(String name, String ssn){this.name = name;this.ssn = ssn; }필드와 매개 변수(Parameter) 이름이 동일하면 매개 변수가 우선순위가 높기 때문에 필드에 접근을 못함.따라서 field = parameter 이면 this. - Constructor(생성자) --> 생성자 선언 : 기본 생성자 추가 X Car myCar = new Car(); --- 기본 생성자는 사용 X --> 생성자 선언 생략..
- Total
- Today
- Yesterday
- 텔레그램
- API
- 파이팅코리아
- 스프링 부트
- 객체지향과 디자인패턴
- cgv
- 예매 알림
- 완주하지 못한 선수
- json
- 타겟 넘버
- 카카오인턴
- 자바
- 기능개발
- 맵 api
- FrogJmp
- 문자열 내 마음대로 정렬하기
- java
- 쇠막대기
- 노션트렐로광고X
- codility
- 프로그래머스
- 더 나은 내일
- 다음 맵 api
- 124 나라의 숫자
- 안드로이드 스튜디오
- 최솟값
- Spring
- K번째수
- AWS
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |