프로그래밍 언어

기계(컴퓨터)에게 명령이나 연산을 시킬 목적으로 설계되어 기계와 의사소통 할 수 있게 해주는 언어로 사람이 원하는 작업을 컴퓨터가 실행할 수 있도록 한다. 이 언으들은 사람이 이해하기 쉽게 만든 언어이며 실행될때 컴파일러로 컴파일 되고 컴퓨터는 이 컴파일된 일련의 명령들을 수행한다

자바(Java) 프로그래밍 언어의 특징

  • 객체 지향언어
    • 객체지향프로그래밍의 대표적 특징에는 상속,캡슐화(은닉),다형성,추상화가 있다. ⇒ 코드의 재사용성이 증가하고 유지보수를 용이하게 된다.
      1. 상속 (Inheritance) : 부모 클래스의 변수와 메서드를 자식 클래스가 전부 물려받는 것
      2. 캡슐화 (Encapsulation, Information Hiding) : 객체의 변수 및 메서드를 외부 객체가 액세스 하지 못하게 감싸는 개념, 클래스의 getter/setter 등을 통해 은닉
      3. 다형성(Polymorphism)
        • 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미
        • 자바에서는 한 레퍼런스 변수가 다른 형태의 객체를 참조할 수 있음
        • 오버로딩, 오버라이딩, 업캐스팅, 다운캐스팅 제공
      4. 추상화 (Abstraction)
        • 자바에서 공통의 속성, 기능을 묶어 이름을 붙이는 것을 의미
        • 자바에서 추상화는 추상클래스, 인터페이스를 통해 구현된다
        • 추상클래스 : 추상메서드를 하나 이상 포함한 추상 클래스, 클래스 선언시 abstract 키워드를 붙힌다
        • 인터페이스 : 모든 메서드를 구현해야한다. 다중 상속 가능
  • 플랫폼에 독립적이다 ⇒ 어느 OS에서도 실행 가능하다
  • 동적 로딩(Dynamic loading)을 지원 자바는 애플리케이션이 실행될 때 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적 으로 적재 (하나의 클래스를 로딩하는 과정에서 해당 클래스에 포함된 클래스를 로딩하는 것을 로드타임 동적 로딩이라고 한다)
    public class HelloWorld {
         public static void main(String[] args) {
            System.out.println("Hello World");
         }
    }
    HelloWorld 클래스를 실행했을 때 클래스 로드 과정
    1. 최상위 클래스로드인 부트스트랩 클래스로더가 생성된 후에 JVM을 구동시키기 위한 필수 라이브러리의 클래스를 JVM 메모리에 적재,

    2. 모든 클래스가 상속받고 있는 Object 클래스를 읽어온다.

    3. 이후,어플리케이션 클래스로더는 명령행에서 지정한 HelloWorld 클래스를 로딩하기 위해, HelloWorld.class 파일을 읽는다. ⇒ HelloWorld 클래스를 로딩하는 과정에서 필요한 클래스가 존재 java.lang.String , java.lang.System

    4. 이 클래스들은 HelloWorld 클래스를 읽어오는 과정에서, 즉 로드타임에 로딩된다.

    5. 최종적으로 HelloWolrd 클래스 로딩

      Object 클래스를 읽어온다 → HelloWorld클래스를 로딩하기 위해 HelloWorld.class 파일을 읽는다 → 로딩과정에서 java.lang.String , java.lang.System이 필요하다 → 클래스를 읽어오는 과정에서 로드타임에 로딩

Java의 변수

  1. 지역변수(local variable) : 중괄호 내에서 선언된 변수
    • 지역변수를 선언한 블록(중괄호) 내에서만 유효
  2. 매개변수(parameters) : 메소드에 넘겨주는 변수
    • 메소드가 호출될 때 생명이 시작되고, 메소드가 끝나면 소멸
  3. 인스턴스 변수(instance variable) : 메소드 외부, 클래스 안에 선언된 비 정적 변수(static 예약어 X)
    • 객체가 생성될 때 생명이 시작되고, 그 객체를 참조하고 있는 다른 변수가 없으면 소멸된다
  4. 클래스 변수(class variable) : 인스턴스 변수처럼 메소드 밖에, 클래스 안에 선언된 변수 중에서 타입 선언 앞에 static이라는 예약어가 있는 변수
    • 클래스가 처음 호출될 때 생명이 시작되고, 자바 프로그램이 끝날 때 소멸된다.

변수 이름 명명 규칙

  • 길이의 제한은 없다.
  • 첫 문자는 유니코드 문자, 알파벳, &(달러표시, dollar sign), (언더스코어, underscore)만 올 수 있다. 그런데 보통 변수 이름은 일반적으로 $와 로 시작하지 않는다.
  • 두 번째 문자부터는 유니코드 문자, 알파벳, 숫자, $, _ 중 아무것이나 사용할 수 있다.
  • 보통은 메소드 이름처럼 지정해서 사용한다. 첫 문자는 소문자로 시작하는 단어이고, 두 번째 단어의 첫 문자만 대문자로 시작하면 된다.

변수 - 기본타입(Primitive Type)

  • 범위를 벗어날 경우 Overflow 발생
  • 스택 메모리에 힙메모리를 참조하기 위한 주소값이 아닌 실제 값이 저장된다
  • 컴파일 시점에 메모리가 할당된다
    타입저장공간범위비고
    int정수4 Byte-2,147,483,648 ~ 2,147,483,647 (약 20억)
    long정수8 Byte-9,223,372,036,854,775,808
    ~ 9,223,372,036,854,775,807접미어 L 사용
    300_000_000_000_000L
    short정수2 Byte-32,768 ~32,767
    byte정수1 Byte-128 ~ 127
    float부동 소수점4 Byte약 +-3.40282347E+38F (자릿수 6~7)접미어 F 사용
    3.39F
    double부동 소수점8 Byte약 +-1.79769313486231579E+308 (자릿수 15)
    charchar2 Byte문자 1글자UTF-16 문자 인코딩
    booleanboolean1 Bytetrue, false만 가능논리 값, 참 거짓만 판단

변수 - 참조형 타입(Reference Type)

  • 기본형 타입 8가지를 제외한 모는 타입
  • null 값을 가질 수 있다
  • 데이터는 힙 메모리에 저장되고 스택에 올라오는 변수에는 힙메모리의 주소값을 저장한다

연산자 종류 및 우선순위

종류연산자우선순위
증감 연산자++, --1순위
산술 연산자+, -, *, /, %2순위
시프트 연산자>>, <<, >>>3순위
비교 연산자>, <. >=, <=, ==, !=4순위
비트 연산자&,, ^, ~
논리 연산자&&,
조건(삼항) 연산자(condition) ? value1 : value27순위
대입 연산자=, *=, /=, %=, +=, -=8순위

객체지향 프로그래밍

  • 실제 세계를 객체라는 단위로 나누고 객체들간의 상호작용을 프로그래밍으로 표현한다
  • 프로그램을 여러개의 독립된 단위인 객체들의 모임으로 파악 하고자 하는것

객체란

  • 현실세계에 존재하는 모든것이 객체가 될 수 있다
  • 객체는 고유한 특성과 행동을 가지며 다른객체에게 행동을 요청하거나 정보를 주고 받는 등 상호작용을 하며 존재한다
  • 속성(Field,) 동작(Method)로 구성되어 있다

객체지향 언어의 조건

  • 캡슐화, 정보은닉 기능 표현 문법
    • 캡슐화란 관련된 필드와 메서드를 하나로 묶고
    • 구현을 외부로부터 감춤으로써 정보를 은닉한다
    • 외부에서는 공개된 메서드를 통해 접근 가능
    • 응집도를 증가시킨다
    • 코드 재사용성을 높일 수 있다
  • 상속 및 추상화 표현 문법
    • 공통된 특징을 묶어 하나의 클래스나 인터페이스로 정의하는 것
    • 추상 클래스를 상속할 경우 추상 메서드를 구현해야 하고, 인터페이스의 경우 정의한 기능을 모두 구현해야한다
      • 추상클래스의 다중상속은 불가능
      • 인터페이스 다중상속은 가능하다
  • 다형성 표현 문법
    • 자바는 다형성을 구현하기 위해 오버라이딩, 오버로딩을 제공한다
    • 오버라이딩의 경우 부모클래스에 정의된 메서드를 재정의 하거나 추상클래스, 인터페이스를 상속받음으로써 메서드 구현이 강제되는데, 이를 통해 하나의 메서드 명으로 클래스마다 다양한 구현을 할 수 있다.
    • 오버로딩의 경우 하나의 메서드를 매개변수마다 다르게 정의하여 매개변수에 따른 다양한 구현을 할 수 있다.

0개의 댓글