simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 참조변수
  • 스프링
  • scanner #next() #nextLine()
  • 자바
  • 자바프로그램
  • null
  • 컨트롤러
  • 자바메모리구조
  • 참조타입
  • 404
  • 자바프로그래밍
  • JVM메모리구조
  • controllerTest

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

자바 설치부터 제어문까지 기본 핵심 복습
Language/Java

자바 설치부터 제어문까지 기본 핵심 복습

2022. 7. 5. 10:39

|  개발 환경 구축

(1) 자바 환경 구축

- 자바는 JVM을 통해 모든 플랫폼(OS)에서 독립적으로 작동한다.

- 오라클사에서 JDK를 다운할 수 있다.(또는 openJDK 사용) 설치 사이트 바로가기

- 명령프롬프트(CMD)로 설치 환경 확인

- 시스템 환경 변수 설정

변수명 경로 예시
Path java.exe가 있는 경로 %JAVA_HOME%\bin
JAVA_HOME jdk폴더 경로 C:\myDev\jdk1.8.0_333

rf. 코딩 폰트 설치하기 : d2coding, jetbrains mono 폰트

rf. 맥에서 자바 설치하기 : [1] homebrew 설치 [2] 터미널에서 자바 설치

 

더보기

[ 시스템 환경 변수 - Path는 왜 넣는 걸까? ]

 

운영체제(OS)가 프로세스를 실행할 때 참조하는 값을 환경 변수라고 한다.

환경 변수에는 여러가지가 포함될 수 있는데, 이 중에서 Path는  말그대로 "경로"를 말한다.

Path를 통해서 한 번 경로를 입력해 두면, JDK 실행을 호출할 때 OS가 알아서 Path에 저장된 값를 참조한다.

 

※ 출처 : https://seol2.tistory.com/141

 

(2) 컴파일 및 실행

- 컴파일 및 실행과정

start ----------------> compiled ---------------> result
소스파일.java 컴파일러 : javac.exe 바이트코드 인터프리터 : java.exe 실행결과
class Main { //코드 } javac HelloWorld.java 000111101010001010...... java HelloWorld 안녕!

- 명령프롬프트 활용

- 에디터(IDE) 활용

에디터명 개인적인 비교 다운경로 사용자수 (*jlab 설문결과)
IntelliJ - 말끔한 UI
- 상세한 가이드 (ex. 메소드의 매개변수까지 자동 안내)
바로가기 약 40%
Eclipse - 각종 단축키를 활용하여 빠른 코딩 가능
  (ex. 만능해결사 ctrl + space)
- 워크 스페이스 구조를 상세히 안내
- 다소 올드한 UI와 복잡한 설정
바로가기 약 30%
Visual Studio - 과거에 자주 사용되던 에디터
- 다양한 플러그인을 사용할 수 있다
바로가기 그 외
✅ 이클립스를 설치하면 가장 먼저 해야할 것 : 인코딩 타입을 MS949 -> UTF-8로 바꾸어준다.
( 위치 : [Windows] - [Preference] - search : encoding, Workspace/CSS/HTML/JSP/XML 모두 UTF-8로 설정)
✅ IntelliJ나 이클립스나 내장된 openJDK를 사용할 수 있다. * 되도록 오라클에서 JDK 설치 후 사용 권장
(단, IntelliJ는 openJDK를 선택해서 설치해야 한다. 이클립스는 기본적으로 설치된 openJDK가 있다)
✅ 이클립스 프로젝트에 JDK 경로 설정하기 (아래 '더보기' 선택)  
더보기

 

|  자바 확장자와 파일

구분 확장자 내용
자바 파일 소스파일.java, 바이트코드.class 소스코드, 이진코드
자바 아카이브 압축명.jar 패키지 포맷
: 자바코드 + 리소스 + 메타데이터 + 기타 
웹 아카이브 압축명.war 웹 패키지 포맷
: 서블릿 + JSP + 리소스(html,js,css...) + ...
엔터프라이즈 아카이브 압축명.ear application server에 배포하기 위해 jar과 war을 묶어놓은 파일

 

|  자바 구조와 문장

패키지 (선택) 첫글자 소문자로 표기, ' . '을 통해 상세 경로를 나타낸다. package java.util.Random
클래스 첫글자 대문자로 표기, 그 외는 식별자* 명명법을 따른다. class Main{ 
    // 필드
    // 메소드
}

 

* 예약어 : 예약어는 이미 정의된 것 (ex. 기본형 변수, if/while.... )

* 식별자 : 사용자가 지정한 것 (대소문자 구분, 첫문자 숫자 불가, 공백사용 불가, 특수문자 $, _만 가능, 한글 사용 가능)

 

|  클래스

클래스 필드 변수 기본형 논리형/문자형/정수형/실수형
참조형 참조값(16진수의 주소)을 담는 변수
초기화블럭 변수 선언 및 초기화 후, 초기화 블럭을 통해 재초기화*
메서드 생성자 인스턴스 생성 시, 생성자 안에 인자를 넣어 변수 초기화 
일반 메서드 매개변수와 반환값을 갖는다
접근제어자* +, (default) all  

 

* 사용하는 접근제어자 표시 : all(모두 사용가능), +(public), #(protected) , (default), -(private) 

* 초기화 블럭 : static이 들어간 경우 클래스가 로딩될 때, 그렇지 않은 경우 인스턴스가 생성될 때마다 초기화를 한다. (일반적으로 리소스를 업로드할 때 쓴다.)

 

|  변수와 자료형

변수 구분 크기 범위 기본값
기본형 논리형 boolean 1byte false, true false
문자형 char 2byte 0 ~ 약 6만 '\u0000'
정수형 byte 1byte -128 ~ 127 0
short 2byte 약 -3만~약 3만 0
int 4byte 약 -20억 ~ 약 20억  0
long 8byte   0L
실수형 float 4byte   0.0f
double 8byte   0.0
참조형 -   JVM 크기에 따름
32bit(4byte)
/64bit(8byte)
  null

- 정수형에 대한 자세한 설명 (아래 '더보기')

더보기

(1) 진수 표현

int n10 = 10;   //10진수
int n2  = 0b10; // 2진수
int n8  = 010;  // 8진수
int n16 = 0xff; //16진수

// JDK 1.7부터는 '_'를 통해 자릿수를 표기할 수 있게 됐다.
n2 = 0b0000_0000_0000_0000_0000_0000_1010;

 

(2) 2진수의 음수 표현 (2의 보수)

//2의보수 [앞에서 마지막 전까지 반대, 마지막은 동일]
int n1 = 0b0000_0000_0000_0000_0000_0000_0000_1100; //12
int n2 = 0b1111_1111_1111_1111_1111_1111_1111_0100; //-12

//n1 + n2은 아래와 같다.
int n3 = 0b0000_0000_0000_0000_0000_0000_0000_0000; //0

(3) long과 short/byte

// short와 byte는 사칙연산 시 int로 반환된다. (내장된 연산장치가 int 단위로 반환하기 때문)
short n1 = 1;
short n2 = 2;
int res = n1 + n2;

// long의 표현
long n3 = 1L;

- 오버플로우와 언더 플로우

(1) 오버플로우 : 자료 범위를 넘어서 양수가 음수로 바뀌는 경우

(2) 언더플로우 : 자료 범위를 넘어서 음수가 양수로 바뀌는 경우

 

더보기
public class Test {
    public static void main(String[] args) {
        //int n = 30_0000_0000; --> 에러! 
        int n1 = 0b0111_1111_1111_1111_1111_1111_1111_1111; //int 최댓값 / int범위 : -2^31 ~ (2^31 - 1)
        int n2 = 0b1000_0000_0000_0000_0000_0000_0000_0000; //최댓값에 2진수 1을 더한 값
        System.out.println("n1 = " + n1); //n1 = 2147483647
        System.out.println("n2 = " + n2); //n2 = -2147483648 ---> 오버플로우

        int n3 = n2 - 1;
        System.out.println("n3 = " + n3); //n3 = 2147483647 ---> 이처럼 음수가 양수로 바뀌는 경우는 언더플로우

    }
}

- 문자형 : 유니코드에 따라 문자를 나타낸다

char c1 = '\u0000'; 
char c2 = '\uac00'; //'가'
//참조 : 한글 유니코드(UTF-8) https://jjeong.tistory.com/696

- 변수 표기법

표기법 어디에? 예시
파스칼 자바 : 클래스
c# : 변수, 클래스
class Car { }
Date, LocalDate, String, Scanner
카멜 자바 : 변수, 메소드 int speed, void speedTest(){}
스네이크 - 소문자 c, php void speed_test(){}
스네이크 - 대문자 SQL문법
자바 : 상수
SELECT * FROM member
final int MAX_SPEED
헝가리언  과거 변수 타입을 구분하기 위해 사용 int iMaxSpeed; int strUsername
케밥 html : class 구분
url 주소 표준 : '-'로 구분
<div class = "list-imgtxt">
http://www.naver.com/board-list //"_"가 아닌 "-"가 표준

 

|  연산자와 피연산자

- 단항 > 사칙연산 > 비교 > 대입, 크게 4가지의 방향으로 이해

- 아래의 어떤 연산자 보다도 가장 우선순위가 높은 것은 "(   )"

우선순위 연산자 이름 연산자 연산 방향
1 후위 단항 i++, i-- 왼쪽에서 오른쪽
2 전위 단항 ++i, --i, +val, -val, !
3 곱셈/나눗셈/나머지 *, /, %
4 덧셈 +
5 비트이동 >>, <<, >>>
6 관계 >, <, <=, >=, instanceOf
7 동등 ==, != 
8 비트 AND &
9 비트 배타적 ^
10 비트 OR |
11 논리 AND &&
12 논리 OR ||
13 조건 삼항 (조건) ? (참) : (거짓) 
14 대입 =, +=, -= .... 오른쪽에서 왼쪽

 

- 비트 연산자

연산자 이름 사용 의미
& 비트 AND op1 & op2 비트가 모두 1이면 결과는 1, 아니면 0
^ 비트 배타적 op1 | op2 비트가 적어도 하나가 1이면 결과는 1, 아니면 0
| 비트 OR op1 ^ op2 비트가 서로 다르면 결과는 1, 같으면 0
~ 보수(complement) ~op1 비트가 0이면 결과는 1, 0이면 1
// 2의 보수를 구하는 법
int i1 = i2;
int i2 = ~i1 + 1; //~ : 1의 보수, 1을 더하면 : 2의 보수

 

- 비트 이동

연산자 이름 사용 의미 비고*
>> signed left shift op1 >> op2 [기존부호] 오른쪽으로 op2비트만큼 이동 = op1 * 2^op2
<< signed right shift op1 << op2 [기존부호] 왼쪽으로 op2비트만큼 이동 = op1 / 2^op2
>>> unsigned left shift op1 >>> op2 [0으로 채움] 오른쪽으로 op2비트만큼 이동  

* 단, 변수의 Max크기까지만 가능하다. (ex. int 범위는 ~ 2^32까지)

 

- 형변환

(1) 자동 형변환 : 작은 범위에서 큰 범위의 자료형에 값을 넣을 때

(2) 명시적 형변환 : 큰 범위에서 작은 범위의 자료형에 값을 넣을 때. ex. int num = (int)(5/1.0);

 

- 연산 관련 예외

(1) ArithmeticException : (런타임 에러) 정수를 0으로 나눌 때

(2) Infinity : 실수를 0.0으로 나누면 무한대 

(3) byte와 short 산술 연산 : 모두 int로 변환되어 연산 수행

 

|  제어문과 반복문

구분 이름 코드 비고
제어문 조건문 if, if~else 자바는 if~else if~else가 없다
스위치문 switch~case default
반복문 - for, foreach
while, do while
break와 continue

 

'Language > Java' 카테고리의 다른 글

객체지향 언어의 특징 1_추상화 (모델링)  (0) 2022.07.20
객체지향 프로그래밍이란?  (0) 2022.07.18
자바 기초 개념 정리  (0) 2022.07.01
[객체지향프로그램] 응집도와 결합도  (0) 2022.05.04
[이클립스] 프로젝트의 JDK 버전 변경하기  (0) 2022.04.26
    'Language/Java' 카테고리의 다른 글
    • 객체지향 언어의 특징 1_추상화 (모델링)
    • 객체지향 프로그래밍이란?
    • 자바 기초 개념 정리
    • [객체지향프로그램] 응집도와 결합도
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바