본문 바로가기

STUDY/Java

<자바의 신> 1장 프로그래밍이란 무엇인가?

1장 프로그래밍이란 무엇인가?

  • 용어
  1. Programming: 컴퓨터에게 할 일을 가르치는 것
  2. Programming Language: 사람과 컴퓨터 사이의 언어
    ex) Java, C, C++, Python
  3. 메소드 Method: 어떤 값을 주고 결과를 넘겨주는 것
    접근제어자 리턴타입 메소드이름 (매개변수) { }
    public boolean checkPassword (String password) { }
    *메소드 이름 앞에 꼭 적어야 하는 것: 리턴 타입
  4. 클래스 Class: 자바에서 가장 작은 단위, 상태(state) + 행동(behavior)
    1. 하나의 클래스 안에는 0개 이상의 메소드가 존재
    2. 상태: 클래스 안, 메소드 밖에 정의하는 변수
    3. 행동: 메소드
  5. 예약어: 예약되어 있어 쓰지 못하는 단어
    ex) public, class, int, return → 클래스, 메소드, 변수의 이름으로 사용 불가능

 

 

2장 Hello God of Java

  • 코드 작성 > 컴파일 > 실행
             javac      java

 

  • 자바 컴파일 및 실행 절차
    • 소스 > [컴파일러] > 바이트 코드 > [디스크] > 바이트 코드 > [JVM] > 기계어 > [운영체제]
    • .java 소스 파일을 컴파일하면 .class 파일(바이너리 파일)이 생성되어 디스크에 저장됨
    • .class 파일은 JVM에서 읽어서 운영체제에서 실행

 

  • main 메소드
    • 실행을 목적으로 하는 모든 자바 클래스는 main() 메소드가 반드시 있어야 한다
public static void main(String[] args){ }
  • public: 접근 제어자
  • static: 메소드를 static으로 선언하면 객체를 생성하지 않아도 호출 가능
  • void: 돌려줄 값이 없을 때 void
  • main: 메소드 이름
  • (String[] args): args라는 배열의 매개변수

 

  • 주석

한줄 주석

//

블록 주석

/*
*/

문서용 주석

/**
*/

 

  • 메소드
public static void main(String[] args){
    System.out.println("Calculator class started");
}
// 리턴타입, 메소드 이름, 메소드 내용은 반드시 있어야 한다

 

 

3장 자바를 제대로 알려면 객체가 무엇인지를 알아야 해요

자바는 객체지향 언어이다

 

  • 객체
    • 각각의 실제 사물을 나타내기 위한 것 <객체: Object, 인스턴스: Instance>

  • 생성자
    • 객체를 생성하기 위한 도구
    • 매개변수가 없는 생성자(기본 생성자)는 클래스를 컴파일할 때 자동으로 생성됨
Car dogCar = new Car(); // new: 객체를 생성하기 위한 예약어

 

 

4장 정보를 어디에 넣고 싶은데

변수

  • 지역 변수 local variable
    • 중괄호 내에 선언된 변수
    • 지역 변수를 선언한 중괄호 내에서만 유효

  • 매개 변수 parameters
    • 메소드에 넘겨주는 변수
    • 메소드가 호출될 때 생명이 시작되고, 메소드가 끝나면 소멸

  • 인스턴스 변수 instance variables
    • 메소드 밖에, 클래스 안에 선언된 변수, 앞에는 static이라는 예약어가 없어야 한다
    • 객체가 생성될 때 생명이 시작되고, 그 객체를 참조하고 있는 다른 객체가 없으면 소멸

  • 클래스 변수 class variables
    • 메소드 밖에, 클래스 안에 선언된 변수 중 타입 선언 앞에 static이라는 예약어가 있는 변수
    • 클래스가 처음 호출될 때 생명이 시작되고, 자바 프로그램이 끝날 때 소멸
public class VariableTypes{
    int instanceVariable; // 인스턴스 변수
    static int classVariable; // 클래스 변수

    public void method(int parameter) { // 매개변수
        int localVariable; // 지역 변수
    }
}

 

변수 이름

  • 길이의 제한은 없다
  • 첫 문자는 유니코드 문자, 알파벳, $, _
  • camelCase
  • 상수(constant value): 모두 대문자로 지정하고 단어와 단어 사이는 _로 구분
    절대 변하지 않는 값

 

자료형

1. 기본 자료형 Primitive data type

  • 정수형: byte, short, int, long, char
    • byte: 8비트의 signed 타입 [-128 ~ 127]
    • byte < short < int < long
    • char: ‘a’, ‘\u0000’ (16진수), 0~65,535 사이 숫자(유니코드)
    • byte는 왜 만들었을까?
      : 데이터를 저장할 때 byte를 조합해서 사용하면 적은 공간에 보다 많은 내용을 저장 가능
  • 소수형: float, double
    • float: 32비트
    • double: 64비트
    • 돈 계산과 같이 정확한 계산이 요구될 때는 java.math.BigDecimal 클래스 사용
  • 기타: boolean
    • boolean: true/false

 

2. 참조 자료형 Reference data type

new를 사용해 초기화 (String은 예외)

 

 

5장 계산을 하고 싶어요

1. 연산자 Operator

  • 대부분의 연산자는 기본 자료형을 더하거나 빼는 등의 계산을 하기 위해 사용
  • 참조 자료형은 String이라는 클래스만 + 연산이 가능

 

2. 산술 연산자 Arithmetic Operator

+ 더하기

- 빼기

* 곱하기

/ 나누기

% 나머지

3. 복합 대입 연산자 Compound Assignment Operator

  • += 기존 값에 우측 항의 값을 더하기
  • -= 기존 값에 우측 항의 값을 빼기
  • *= 기존 값에 우측 항의 값을 곱하기
  • /= 기존 값을 우측 항의 값으로 나누기
  • %= 기존 값을 우측 항의 값으로 나눈 나머지

 

4. 단항 연산자 Unary Operator

  • +
  • -
  • ++ 증가 연산자
  • -- 감소 연산자
  • ! 논리 부정 연산자
  • intValue++ // 변수를 참조한 후 +1
    ++intValue // 변수를 참조하기 전에 +1

 

5. 계산 순서

  1. 단항 연산자 (++ -- ! - ! ~(틸드))
  2. 산술 연산자 (* / %)
  3. 산술 연산자 (+ -)

 

6. 비교 (결과는 boolean)

    • == 같음
    • != 같지 않음
    • , >=, <, <= (boolean, 참조 자료형은 비교 불가능)
    • 기본 자료형은 같은 종류끼리 비교 가능, 참조 자료형은 주소 값이 같은지 확인

 

7. 논리 연산자

  • && 두 개의 조건이 모두 true이면 true
  • || 둘 중 하나라도 true이면 true

 

8. ? : 연산자

변수 = (boolean조건식) ? true일 때 값 : false일 때 값;

 

형변환 Casting

서로 다른 타입 사이에 변환하는 작업

  • boolean은 형 변환이 불가능
  • 기본 자료형 → 참조 자료형, 참조 자료형 → 기본 자료형으로는 형 변환 불가능
    ex1) byte 타입으로 할당한 변수를 short 타입의 변수로 지정하고 싶을 때
  • 1바이트 → 2바이트로 형변환 <별도로 할 것 없음>
  • 범위가 작은 타입에서 범위가 큰 타입으로 변환 → 자동 형 변환



ex2) short 타입으로 할당한 변수를 byte 타입으로 지정하고 싶을 때

2바이트 → 1바이트로 형변환

범위가 큰 타입에서 범위가 작은 타입으로 변환 → 타입 명시
*기존 값이 사라지고 엉뚱한 값으로 바뀔 수 있으므로 조심히 사용

byte byteValue = 127;
short shortValue = byteValue; // 자동 형 변환

byteValue = (byte)shortValue; // 타입 명시 필요

 

타입 별 사용 가능한 연산자 <정수형>

  1. 결과가 boolean
    • <, <=, >, >= 숫자 비교 연산자
    • ==, != 숫자 동등 연산자
  2. 결과가 int, long
    • +, - *, /, % 기본 사칙 연산자
    • ++, -- 증감 연산자
    • &, |, ^, ~ <<, >>, >>> 비트 연산자
  3. 기타 연산자
    • ? : 삼항 연산자
    • 형 변환 연산자
    • 문자열 더하기 연산자

 

타입 별 사용 가능한 연산자 <소수형>

정수형과 같지만 비트 연산만 불가능

타입 별 사용 가능한 연산자

  • ==, != 동등 연산자
  • &&, || 조건적 논리 연산자
  • !, &, | ^ 논리 연산자 (*숫자에 사용하면 비트 연산자)
  • ? : 삼항 연산자
  • 문자열 더하기 연산자