| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 29 | 30 |
| 31 |
- AWS
- side project
- array
- github
- spring boot
- crud
- MegabyteSchool
- Entity
- 게시판 리뷰 만들기
- Algorism study
- 클래스 상속
- #javaStudy
- GIT
- tomcat
- #패스트캠퍼스 #국비지원교육 #메가바이트스쿨 #MegabyteSchool #개발자취업부트캠프 #내일배움카드
- 국비지원교육
- MVC 패턴
- 게시판 만들기
- 내일배움카드
- 메가바이트스쿨
- 패스트캠퍼스
- 개발자취업부트캠프
- View
- group study
- Spring
- Sts
- MVC
- Interface
- 클래스 class
- Java
- Today
- Total
tuter77
Java : 연산자(2), 조건문, java의 기본기능 및 특징. 본문
<java/온라인강의>
● 비트 연산자
~ : 비트의 반전(1의 보수)
& : 비트단위 AND
| : 비트단위 OR
^ : 비트단위 XOR
<< : 비트 왼쪽 shift
>> : 비트 오른쪽 shift
>>> : 비트 오른쪽 shift (채워지는 비트각 부호와 상관없이)
위의 연산자들은 비트를 켜거나 끌때, 또는 비트를 반전하고 싶을 때 사용한다.
예제)
5 > 0000 0101
10 > 0000 1010
5 & 10 > 0000 0000
5 | 10 > 0000 1111 (15)
5 ^ 10 > 0000 1111 (15)
~ 5 > ~ 0000 0101 > 1111 1010 (맨 앞의 부호가 1이므로 음수)
5 << 1 > 0000 1010 (10 = 5 * 2^1) (2의 n승으로 곱해진다.)
5 << 2 > 0000 1010 (20 = 5 * 2^2) (2의 n승으로 곱해진다.)
5 >> 1 > 0000 0010 (2 = 5 / 2^1) (2의 n승으로 나눠진다.)
● 연산자의 우선순위
괄호, 단항, 산술, 비트이동, 관계, 논리 순이다.
● 조건문
조건에 따라 다른 실행이 이루어지도록 구현.
- if 문법
if ( 조건식 ) {
수행문; // 조건이 참인 경우 수행됨.
} // 조건이 거짓일 경우 수행됨.
- if-else 문법
if ( 조건식 ) {
수행문; // 조건이 참인 경우 수행됨.
}
else{
수행문2; // 조건이 거짓일 경우 수행됨.
}
- if-else if-else 문
조건이 여러개 일 경우에 사용.
if ( 조건식 ) {
수행문;
}
else if {
수행문2;
}
else if {
수행문3;
}
else{
수행문4; // 위의 조건들에 해당없는 경우 default 조건으로 수행된다.
}
● if-else if와 if-if 문의 차이점
if-else문의 경우 여러 조건 중 가장 적합한 조건의 수행문만 수행하지만, if-if문은 단일조건이기 때문에 if확인-종료 다음 if확인-종료 순으로 진행되어, 적합한 조건이라면 모두 수행한다. 즉, 배타적인 logic이 성립되지 않는다.
예시)

위 코드의 콘솔창에 8을 입력하면, 미취학 아동으로 나오고, 입장료는 해당 charge인 1000원으로 나온다.
이 구문의 else if를 if로만 구성하게 되면 같은 8을 콘솔창에 입력하더라도, 미취학 아동과 초등학생 모두의 수행문이 나오게된다.
● switch case 문
if, else if 문을 더 간단히 표현한다.
비교조건이 특정값이나 문자열일 경우에 사용하는데, break문을 ㅌ사용하여 각 조건이 만족되면 switch 문을 빠져나오게 한다.
다만 java 14 버전부터는 break 문없이도 사용될 수 있다.아래는 예시이다.
switch (조건) { case 1: 수행문1;
break;
case 2:
수행문2;
break;
default:
수행문3;
break;
}
<Java 실강>
어쩌다보니 자바 온라인강의와 실시간 강의가 겹치게 되어 해당 공부내용을 같은날에 정리하려고 한다.
진도를 많이나가서 모든 내용을 다 다룰순없고, 큼직큼직하게 중요하게 느껴졌던 내용들만 적겠다.
● java는 jre와 jdk로 구성되어 있는데, jre(Java Runtime Enviroment는 자바 실행환경으로 application 실행을 위한 라이브러리, 클래스 로더, JVM 등을 제공한다.
● JVM은 Java Virtual Machine 으로 자바의 애플리케이션을 해석하고 로드하여 실행하는 가상머신으로 하드웨어 및 OS 독립성을 제공한다고 한다.( 여기서의 OS독립성은 타 언어들은 윈도우면 윈도우, 리눅스면 리눅스 처럼 한 OS에 맞춰져 컴파일 되는 데에 반면, JVM기반의 자바는 JVM용으로 컴파일 되기때문에 한번 작성된 코드는 어떤 OS에서도 다 구동될 수 있음을 의미한다. 여기서 사용되는 코드가 ByteCode라고 한다.)

위는 JVM 내부구조로 동작흐름은 아래와 같다.
- Class loader는 java 애플리케이션 실행시 마다 클래스 파일을 로드한다.
- Execution Engine을 통해 Byte코드를 해석한다.(interpret)
- runtime data area에 메모리 등의 리소스 할당 후 동작한다.
● Class(method) Area 에서는 런타임의 상수풀(constant pool), field, method data, method에 대한 코드, 클래스 별 구조를 저장한다.
● Heap Area는 runtime의 객체가 할당되는 데이터 영역으로, Heap영역의 사용되지 않은 객체들을 GC에 의해 자동으로 메모리에서 제거된다.
● Stack Area는 주로 로컬 변수를 저장하는 데이터 영역으로 heap 객체에 대한 참조를 포함한다. 또한 각 thread별로 Private JVM Stack 이 생성된다.
● 이어 JDK는 Java Development Kit로서 JRE의 상위집합, JVM, API, Compiler, Tools, API Document 가 포함된다.
(JDK = JRE(JVM + Library classes) + Developer tools)
*jdk 구성요소(javac, java 등)은 다루지 않겠다.
● java의 특징으로 단순화, 객체지향언어(OOP), Classloader/Bytecode Verifier 를 통한 보안성, 이식성(JVM을 통한), 네트워크와 분산처리지원, 동적클래스 로딩(Dynamic Class Loading), Multi-thread 지원, 풍부한 API(Application Program Interface), 자동 메모리관리(GC - Garbage Collection) 이 있다.
이 중 이식성은 앞에서 살펴봤고, Application 과 Applets의 차이점을 짧게 기술하면 Application은 OS의 JVM을 통해 실행하는 반면, Applets은 브라우저 빌트인 JVM을 통해 실행된다는 차이가 있다.
java API Document 는 클래스 라이브러리의 자세한 설명 및 기능 사용법을 확인할 수 있다.
https://docs.oracle.com/java/javase/11/decs/api/index.html 을 통해 확인할 수 있다.
● 다음으로 다룰 내용은 Class Loader인데 클래스를 로드하고 링크하여 배치한다.
자세히 말하면, Class는 참조되는 순간 동적으로 load 및 link 가 이루어지며, JVM Namespace를 이용하여 이미 로딩된 클래스는 로딩하지 않는다.
JVM 기동시 기본적으로 로딩하는 순서는 아래와 같다.
- Bootstrap ClassLoder를 생성.(최상위 클래스로더, Native code로 구현_컴퓨터 용어에 가까움)
- Java Runtime Library 를 로딩
- java.lang.Object class를 로딩.
이 과정은 java 애플리케이션 실행시 터미널에서 out/production/프로젝트명 폴더로 이동하여,
java -verbose 패키지명(ch01).클래스명(Board)명령으로 실행할 수 있다.
* 내용 길이로 인해 생략된 자료 (Execution Engine - Interpreter, JIT(Just-In-Time) Compiler), Runtime Data Area)
● 다음은 Garbage Collector 인데 이는 기술면접에도 자주 등장한다고 해서 다룬다.
메모리 관리를 자동으로 해주기 때문에 메모리 관리에 개발자가 할애하는 시간을 많이 줄여줬다고 한다.
알고리즘으로는 G1 GC가 대표적이고 (다른 글에서 공부하겠다.) Serial GC, CMS Collector 등이 있다고 한다.
시스템 레벨의 데몬 스레드에 의해 자동적으로 사용하지 않는 데이터를 메모리로 반환해준다.
Garbage 대상은 Heap과 Method Area에서 현재 사용되지 않고 있는 객체(참조되지 않은 객체)를 의미한다.
시간을 기준으로 (신생) eden > survivor0 > survivor1 > Old 로 구분된다. (old일 수록 참조가 없는 객체)
● java 프로그램 생성.
package > import > class 순으로 작성된다.
package Ch01;
public class Etc {
public static void main(String[] args){
int boardNo = 1;
System.out.println(boardNo);
}
}
Package name : ch01
Class name : Etc
Variable name : boardNo
Method name : main() (터미널에서 out/production/프로젝트명 폴더로 이동하여,
java 패키지명(ch01).CommandArgsEx arg1)명령으로 메인메서드가 어떻게 작동하는지 확인할 수 있다.)
class : java 클래스를 선언시 사용하는 키워드
public : 접근 제어자로 모든 곳에서 접근할 수 있다는 의미(반대는 private)
static : main() 메서드는 JVM에 의해 실행되므로 객체 생성없이 호출되어야하며, static 키워드를 사용하면 static 메서드로 객체 생성없이 사용이 가능.
void : 메서드의 rereturn 타입으로 어떤 값도 반환하지 않는다.
System.out.println() : 괄호 안의 내용을 콘솔에 출력.
위 예시로 보면 package명은 내가 실수로 대문자로 시작했지만, 패키지명은 일반적으로 소문자로 시작한다.
Class 명은 Etc 처럼 첫글자에 $, _, 대문자로 시작하며, 변수는 boardNo인데 이는 낙타의 혹과 같은 camelCase가 적용된 것이다. method역시 camelCase가 권장된다.
현재는 메서드가 가장 기본이 되는 main()이라 따로 저장하지 않았지만 실제 코딩시에는 reNameGet() 과 같은 식으로 작성된다.
오늘은 온라인강의도 자바, 실강도 자바로 자바데이였다. 그러나 다루는 내용이 상이해 기재할 것이 많아서 곤혹스러웠다.
특히 실습과 관련해서 온라인 자바의 조건문, 실강의 구조와 기본개념들은 중요하게 느껴져 열심히 적으려 노력했다.
다만, 담아내지못한 강의들의 내용은 강의자료 복습과 검색을 통해 보충해야할 것으로 보인다.
위 내용은 2022.12.19에 공부한 내용입니다.
'JavaStudy' 카테고리의 다른 글
| Java : 객체, 함수, 메서드 (0) | 2023.01.29 |
|---|---|
| Java : 반복문, 중첩 반복문, break, continue (0) | 2023.01.29 |
| Java : 연산자 (0) | 2023.01.29 |
| Java : 자료형 (0) | 2023.01.29 |
| Java eclipse 활용 및 자료형. (0) | 2023.01.29 |