객체의 상호작용: 메소드 호출을 통해 매개값과 리턴값을 주고 받음으로써 기능
객체: 데이터(필드)와 절차(메소드)의 묶음
객체 모델링 - 객체 관계 :
- 집합관계
- 사용관계
- 상속관계
- 코드 재사용 용이
- 디버깅할 때 수월 // 객체 무결성
- 절차식보다 느리고 설계가 어려움
- 추상화
- 캡슐화
- 상속성
- 다형성
- 바이트 코드를 해석하여 실행하여주는 해석기
- 자바 소스(*.java)는, JVM에서 실행될 수 있는 바이트 코드로 번역되며(*.class),
번역된 바이트 코드는 해석기(JVM)가 있는 어떠한 기종의 컴퓨터 환경에서도 실행 가능
- 자바 프로그램에서 자주 사용되는 자바 클래스 모음(자바 클래스 라이브러리)
- 그래픽,네트워킹,보안,데이터베이스 접근 등의 기능 지원
자바 표준 모듈: JDK가 제공하는 표준 라이브러리. Java 9부터 모듈화되었음
Java.base는 모든 모듈이 의존하는 기본 모듈
Java.se는 JDK가 제공하는 모든 모듈을 제공하는 집합 모듈
API :
- 라이브러리의 사용법을 외부에서 사용할 수 있게 문서화한 인터페이스
라이브러리: .jar
- 개발 시 활용할 수 있는 구현 코드의 집합
- 모듈, 인터페이스의 바이트코드 파일(*.class)들이 압축되어 있음
모듈:
- 기능 단위로 독립된 코드의 집합, 독립적으로 컴파일 가능
- 모듈은 패키지, 클래스, 인터페이스 등 여러 구성 요소를 하나로 묶은 파일 단위 또는 논리적 단위
- 자바 9 이후의 모듈 시스템에서는 module-info.java 파일을 통해 어떤 모듈이 어떤 다른 모듈에 의존하는지 명시적으로 기술
- 관련된 코드(클래스, 함수, 모듈 등)를 "논리"적으로 묶어 관리하는 네임스페이스 단위
- 클래스를 컴파일하는 과정에서 자동으로 생성.
ex.
.
└── com
├── mycompany
│ └── Car.class #{package com.mycompany}
└── yourcompany
└── Car.class #{package com.yourcompany}

.
├── bin
└── src
└── package
└── Hello.java
자바 소스(.java)는, JVM에서 실행될 수 있는 바이트 코드로 번역되며(.class)
ex. javac -d bin src/packacge/Hello.java
번역된 바이트 코드는 해석기(JVM)가 있는 어떠한 기종의 컴퓨터 환경에서도 실행 가능
ex. java -cp bin package.Hello
자바는 클래스 로더를 이용해서 클래스를 메소드 영역에 저장하고 사용.
필드 타입: 처리방식, 기본 타입. 참조 타입.
접근 제한자(static): 메모리 로딩 방식 차이
- 정적 멤버, 인스턴스 없이도 실행. 인스턴스 필드나 인스턴스 메소드, this 사용 불가. / 메소드영역
- 인스턴스 멤버 / 힙영역
상수 선언: final 타입필드 [=초기값]
- 필드 선언 시 초기값 대입, 클래스 귀속 / 메소드영역
- 생성자에서 초기값 대입, 인스턴스 귀속 / 힙영역
소멸자 명시 없음. Java는 GC 이용. 메모리 할당 정보가 공개되지 않음
매개변수 차이로 오버로딩
리턴타입: return 문은 메소드 실행 종료, 메소드 선언에 리턴 타입이 있을 경우 해당 값 반환.
매개변수: 가변길이 매개변수 ... values
| 접근제한자 | 제한대상 | 제한범위 |
|---|---|---|
| public | 클래스, 필드, 생성자, 메서드 | 모든 클래스, 모든 패키지에서 접근 가능 |
| protected | 필드, 생성자, 메서드 | 같은 패키지 또는 다른 패키지의 하위(자식) 클래스에서 접근 가능 |
| default | 클래스, 필드, 생성자, 메서드 | 같은 패키지 내에서만 접근 가능 |
| private | 필드, 생성자, 메서드 | 같은 클래스 내에서만 접근 가능 |