본문 바로가기
Java

자바의 정석 [Ch.01 ~ Ch.05] 1

by eunjineee 2024. 1. 24.

자바의 역사

C언어(절차지향) -> C++(객체지향 과도기) -> Java(객체지향)

자바의 특징

  • OOP(Object Oriented Programming)(객체지향 프로그래밍)
  • 객체를 생성하고, 조작하여 객체끼리 상호작용을 할 수 있도록 하는 프로그래밍 언어

Object 객체

  • 사람의 정의한 모든 것 (추상적인 것X)
  • 항상 정의할 수 있어야 하며, 이를 설계단계에서 추상화한다.

OOP 언어의 특징

  1. 추상화
    추상적인 것을 구체화하는 행위
  2. 캡슐화
    데이터를 보호하고 은닉하는 것
    절차지향과 다른 점으로 데이터를 캡슐화하여 관리하여
    데이터 관리가 명확하고 데이터를 보호/은닉할 수 있음
  3. 상속
    부모 클래스로부터 자식 클래스가 부모 클래스의 속성을 물려받는 것
    물려받아서 내 것처럼 사용 가능
    효율적인 상속 구조를 위해 관계를 잘 고려해야 함
  4. 다형성
    하나의 객체나 메소드가 다른 여러가지 형태를 가질 수 있음
    • 오버라이드, 오버로딩이 대표적

JVM(Java Virtual Machine)

자바를 실행하기 위한 가상 기계

일반 애플리케이션은 OS(Windows)를 거쳐 컴퓨터(하드웨어)에 접근
Java 어플리케이션은 JVM을 거친 후, OS, 컴퓨터에 접근하게 된다.

Object vs Instance

Object ==> instance
⇒ class

메모리에 올라가지 않은 상태가 object
메모리에 올라간 상태를 instance

접근지정자

1번이 가장 좁고 4번이 가장 넓음

  1. private : 나만 접근할 수 있음. 외부에선 절대 접근 불가능
  2. default : 같은 패키지 내에서만 접근가능
  3. protected : 외부 패키지 중 상속받은 객체만 접근가능
  4. public : 아무나 접근가능

** 한 페이지에서는 public 한개만 만들 수 있음

function vs method

  • C언어랑 차이 두려고 그런데, 둘 다 똑같다고 생각하면 됨
  • 자바는 외부함수를 만들지 못함 -> 패키지, 임포트 만 밖에 만들 수 있음
    -> 나머지는 무조건 클래스 안에서 만들어야 함

** 패키지, 임포트 > 순서 중요

일반적인 함수 모양

  • main 함수 : 프로그램의 시작과 끝을 담당
리턴타입 함수명 () {
}
public static void main(String [] args) {

    }
*public : 접근제어자
*static : 공유 > 공유하면 한개 (메인 함수는 오직 하나)

Static

  1. 공유한다.
  2. 메모리상에서 컴파일시 미리 생성된다.
    • 객체와 무관하게 메모리에 먼저 올라감 ( 소속이 없어서 )
  3. 오직 한개이다.
  4. 메모리 절약 가능

** "회사이름"처럼 공통되는 부분을 하나만 만들고 공유해서 사용
** 싱글톤 패턴에 적합

실행

public class Hello {
    public static void main(String [] args) {
        System.out.println("Hello....");
    }
}

> 실행해도 Hello 클래스가 생성되는 것은 아님
> 자동생성 static 때문에 실행 됨

상수

변하지 않는 값

ex) 문자 > 아스키 코드로 변경해줘야함 A 65, a 97 > 상수 X

변수

상수를 저장하는 메모리 공간

** 항상 유지보수하는 거 생각하면서 코드 작성하기

불린 형태로 리턴하면서 어디서 오류뜨는지 잘 확인할 수 있음

Java DataType

기본 타입

  1. 불린 : true/false
    • return 타입에 가장 많이 사용
  2. 문자 : char 2 byte
    • 자바는 2바이트 > 유니코드 (이제는 다 2 바이트)
    • c언어는 1바이트
  3. 정수 : byte short int long
    • 4 → int
    • 4L → Long
  4. 실수 : float(4) double(8)
    • 3.4 → double로 인식 ( 큰개념으로 인식함)
    • 3.4f → float

레퍼런스 타입 (참조)

객체가 생성되는 방식

stack | heap (Queue)

이름 규칙

  1. 클래스 이름은 첫글자 대문자로 작성
  2. 예외적으로 static 클래스는 객체 생성이 미리 되기 때문에 클래스명.xx 이런식으로 사용Static : 클래스이름.~ 하고 사용가능,
  3. 원래 방식도 가능하지만, static을 구분하기 위해서 클래스 이름.~ 으로 사용하기
  4. **System > Static 미리 만들어짐
  5. 객체, 변수, 메소드명을 쓸 때 blackwhiteblackWhite로 구분해주기
  6. 최대 34글자까지 가능

연산자

증감 연산자

++, - -

ex) a++ ⇒ a = a + 1; 후증가

한문장에 같은 이름이 반복되었을 때, 심각한 오류가 발생할 수 있음 > 한 문장에 같은 이름 반복되지 않도록 하기~!

ex) ++a ⇒ a = a + 1; 선증가

연산자 반복적으로 사용했을 때

a = 1

b = a++ b=2, a =3

b = ++a a=3, b = 3

대입 연산자

+=, -=

a = a + 4 a += 4

비교 연산자

a != b

a == b

a =! b

논리 연산자

&&(and), ||(or)

비트연산자

&

a & b a=3, b=4 0011 & 0100 ⇒ 0000 ⇒ 0

a | b = > 0111 ⇒ 7

a >> 1 ⇒ 0001 ⇒ 1 (나누기2)

a << 1 ⇒ 0110 ⇒ 6 (곱하기2)

제어문

IF 문

Switch 문

반복문

For

while

do ~ while

import fava.lang.*;
switch(a) { // a = value
        case 1: System.out.println("1");
        case 2: System.out.println("2");
        case 3: System.out.println("3");
        default: System.out.println("4"); //1 넣으면 1234, break 붙여도 되고 안붙여도 댐
    }

switch(a) { // a = value
        case 1: System.out.println("1"); break;
        case 2: System.out.println("2"); break;
        case 3: System.out.println("3"); break;
        default: System.out.println("4"); //1 넣으면 1
    }

>> break 로 제어하면서 사용할 수 있음
char c; 2byte
String op; (글자수+2 byte) // 레퍼런스 타입

c = sc.next().charAt(0);
>> next는 문자열로 받음 >> 0번째꺼 가져오기
op = sc.next();

if(c=='+')
if(op == "+")

상속

has - a (포함)

is - a (상속)

final >> has a만 쓰겠다 [ 상속은 못한다 / 금지 ]

고쳐쓰지 않겠다

 

For While

public class forWhile {
    public static void main(String [] args) {
        for (초기문; 조건문; 증감문) {

        }

        초기문;
        while(조건문) {
            증감문;
        }
    }
}
** 무한루프 조심하기

while문 장점

** flow chart 만들면 while문이 더 쉬움

** 초기문 증감문 위치에 따라 미묘한 차이 발생

do While문

do {

        }while(조건문);

'Java' 카테고리의 다른 글

자바의 정석 [Ch.08] 5  (1) 2024.01.24
자바의 정석 [Ch.07] 4  (0) 2024.01.24
자바의 정석 [Ch.07] 3  (1) 2024.01.24
자바의 정석 [Ch.06] 2  (0) 2024.01.24