산으로 가자▲

Java 대략적인 정리 본문

Java

Java 대략적인 정리

이성욱입니다 2022. 9. 28. 22:20

자바정리

자바의 특징

  • 운영체제가 독립적이다.

<aside> 💡 일종의 에뮬레이터인 자바가상머신(JVM)을 통해서 가능한 것인데, 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신하고 JVM이 자바 응용프로그램으로부터 전달 받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다.

</aside>

  • 객체지향언어이다.

<aside> 💡 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향언어라는 평가를 받고 있다.

</aside>

  • 비교적 배우기 쉽다
  • 자동 메모리 관리

<aside> 💡 자바로 작성된 프로그램이 실행되면 가비지컬렉터가 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메로리를 따로 관리 하지 않아도 된다.

</aside>

  • 네트워크와 분산처리를 지원한다.

<aside> 💡 풍부하고 다양한 네트워크 프로그래밍 라이브러리(JAVA API)를 통해 빅교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원한다.

</aside>

  • 멀티쓰레드를 지원한다.

<aside> 💡 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과는 관계없이 구현이 가능하다. 관련된 라이브러리( java API)가 제공되므로 구현이 쉽다. 여러 쓰레드에 대한 스케줄링은 자바 인터프리터가 담당하게 된다.

</aside>

  • 동적 로딩을 지원한다.

<aside> 💡 자바는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점이 있다. 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 되며, 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션을 작성할 수 있다.

</aside>

자바 용어

  • 프로그래밍 언어로 작성한 파일을 소스 파일 => 컴퓨터가 이해할 수 있게 컴파일 과정을 거침 => 0,1로 이루어진 기계어 파일로 번역한 후에 컴퓨터에서 사용함
  • 자바 개발 도구 = JDK 자바로 개발할 수 있는 실행 환경(JVM)과 갈 도구(컴파일러)등을 제공한다.
  • 자바 가상 머신( JVM )

<aside> 💡 자바를 실행하기 위한 가상 기계, 자바로 작성된 애플리케이션은 모두 이 가상 컴퓨터(JVM)에서만 실행되기 때문에, 자바 애플리케이션이 실행되기 위해서는 반드시 JVM이 필요하다. JVM을 거치기 때문에 하드웨어에 맞게 완전히 컴파일이 되어 안전하다.

</aside>

  • 자바 프로그램의 실행과정
  1. 프로그램의 실행에 필요한 클래스 파일을 로드한다.
  2. 클래스파일을 검사한다.
  3. 지정된 클래스에서 main메소드를 호출한다.
  • 변수 => 하나의 값을 저장할 수 있는 저장 공간

<aside> 💡 값을 저장할 수 있는 메모리의 특정 번지에 붙이는 이름입니다. 프로그램은 변수를 통해 메모리의 특정 번지에 값을 저장하고 읽을 수 있습니다. => JVM 하나의 변수에 동시에 두 가지 값을 저장할 수 없고, 하나의 값만 저장할 수 있습니다.

</aside>

  • 변수 선언

<aside> 💡 변수에 어떤 타입의 데이터를 저장할 것인지 그리고 변수 이름이 무엇인지 결정한다 변수타입 변수이름; =>선언방법 = 대입연산자 Ex) int ex; 변수선언 Ex) ex =5; 값 저장 Ex) int ex = 5; 변수의 초기화 변수가 초기화되면 메로리 번지 정보를 갖게 되고, 해당 메모리 번지에 값이 저장된다. 변수는 오직 하나의 값만 저장 가능하다. => 새로운 값이 변수에 저장되면 기존의 값은 지워지고 새로운 값만 저장되어 남는다.

</aside>

  • 변수의 타입 - 기본형 숫자 - int long (정수) / float double (실수) 문자 - char(문자) / String (문자열) 논리 - boolean 참과 거짓을 의미하는 ture 와 false 를 저장할 수 있는 타입
  • 참조형 8개의 기본형을 제외한 나머지 타입
  • 변수를 선언할 때에는 다음과 같은 사항 주의

<aside> 💡 변수가 어떤 범위에서 사용될 것 인지를 생각, 선언 위치를 결정 해야 한다. 메소드 블록 전체에서 사용하고 싶다면 메소드 블록 첫머리에 선언한다. 특정 블록 내부에서만 사용된다면 해당 블록 내에 선언한다.

</aside>

  • 변수 하나의 값을 저장하기 위한 공간
  • 상수 값을 한번만 저장할 수 있는 공간 => final 붙인다
  • 리터럴은 그 자체로 값을 의미하는 것
  • Integer.parselnt(); 문자열을 정수 int 타입으로 변환한다
  • Scanner scanner = new Scanner(system.in);int num = Integer.parseInt(inputData); =>입력 받은 내용을 int타입의 값으로 변환
  • inputData = scanner.nextLine(); =>입력 받은 내용을 inputData에 저장
  • 정수형의 오버플로우 타입이 표현할 수 있는 값의 범위를 넘어서는 것을 오버플로우라고 한다. => 최대값 +1 ->최소값 / 최소값 -1 -> 최대값
  • || (or 결합) => 피연산자 중 어느 한 쪽이 true이면 true로 결과를 얻는다. && (and 결합) => 피연산자 양쪽 모두 true이어야 true로 결과를 얻는다.
  • 0.0 <= math.random() <1.0 => 구하려는 임의의 정수 n을 곱하고 int형으로 변환한다. => 0 <= (int)(math.random() * n) < (int)n 각 변에 +1을 한다. 1 <= (int)(math.random() * n)+1 < (int)n +1
  • 반복문 for => for(초기화; 조건식; 증감식){ } 반복문 while => 초기화 while(조건식){ 수행될 문장 } 반복문 do while => do { } while (조건식); // 조건식의 연산 결과가 참일 때 수행될 문장을 적고, 처음 한 번은 무조건 실행된다.
  • 기본 타입과 참조 타입
  • 차이점은 저장되는 값이다.
  • 기본타입 byte, char, short, int, long, float, double, boolean 변수는 실제 값을 변수 안에 저장한다.
  • 참조 타입인 배열, 열거, 클래스, 인터페이스 변수는 메모리의 번지를 변수 안에 저장합니다. =>번지를 통해 객체를 참조한다는 뜻에서 참조 타입이라고 부름
  • 스택(stack) 영역</aside>
  • <aside> 💡 메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다. 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다. 이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 합니다. 스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출합니다. 이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출됩니다. 스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.
  • 힙(heap) 영역</aside>
  • <aside> 💡 메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 ‘그리고 해야만 하는’ 메모리 영역입니다. 힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됩니다. 힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.

배열

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

<aside> 💡 => 각 데이터에 인덱스를 부여해 놓은 자료구조로 인덱스는 0부터 시작한다. score[인덱스] 배열은 같은 타입의 데이터만 저장할 수 있다. / 한 번 생성된 배열은 길이를 늘리거나 줄일 수 없다. 타입[ ] 변수 이름; / 타입 변수 이름[ ]; 배열의 변수를 미리 선언한 후 값 목록들이 나중에 결정되는 상황이라면 다음과 같이 new 연산자를 사용해 값 목록을 지정

</aside>

  • 변수 = new 타입[ ] { 값0, 값1, 값2. …}

<aside> 💡 =>new 연산자로 배열 생성 // 타입[ ] 변수 = new 타입[길이]; 길이는 배열이 저장할 수 있는 값의 개수로 이미 배열 변수가 선언된 경우에도 new 연산자로 배열을 생성할 수 있다.

</aside>

  • 타입[ ] 변수 = null;
  • 변수 = new 타입[길이]; Ex) 길이가 5인 int[ ] 배열을 생성 // int[ ] intArray = new int[ 5 ]; 배열 길이 => 배열변수.length; => int[ ] intArrary = { 10, 20, 30}; => int num = intArrary.length; // 변수 num에는 3이 저장된다. 배열의 생성과 초기화 동시에 => int[ ] score = new int[ ]{50,30,60,80};
  • 향상된 for문 => for( 타입 변수 : 배열 ) { 실행문; } =>배열에서 컬렉션을 좀 더 쉽게 처리하기 위해 향상된 for문 사용

객체지향 언어

객체지향언어의 가장 큰 장점은 ‘코드의 재사용성이 높고 유지보수가 용이하다.’는 것이다. 이 러한 객체지향언어의 장점은 프로그램의 개발과 유지보수에 드는 시간과 비용을 획기적으로 개선하였다.

  • 코드의 재사용성이 높다
  • 코드의 관리가 쉽다.
  • 신뢰성이 높은 프로그래밍을 가능하게 한다.

클래스와 객체

  • 클래스의 정의
  • 클래스란 객체를 정의해 놓은 것
  • 클래스의 용도
  • 클래스는 객체를 생성하는데 사용
  • 객체(Object)
  • 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별 가능한 것을 말한다.
  • 객체 간의 관계
    • 집합관계
    객체는 하나는 부품이고 하나는 완성품에 해당한다.
    • 사용관계
    상호작용으로 객체는 다른 객체의 메소드를 호출하여 원하는 결과를 얻어낸다.
    • 상속관계
    상위(부모) 객체를 기반으로 하위(자식) 객체를 생성하는 관계를 말한다.
  • 일반적으로 상위 객체는 종류를 의미하고, 하위 객체는 구체적인 사물에 해당한다.
  • 객체와 클래스클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있다.
  • 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 한다.
  • 자바에서 설계도가 바로 클래스이다.
  • public 접근 제한자
  • public 접근 제한자는 파일 이름과 동일한 이름의 클래스 선언에만 붙일 수 있다.
  • 객체생성과 클래스 변수new 연산자 뒤에는 생성사자 오는데, 생성자는 클래스( ) 형태를 가진다.new 연산자는 힙 영역에 객체를 생성시킨 후 객체의 번지를 리턴하도록 되어 있다.
  • new 연산자로 생성된 객체는 메로리 힙(heap) 영역에 생성된다.
  • new는 클래스로부터 객체를 생성시키는 연산자입니다.
  • 클래스의 구성맴버
public class ClassName{

//필드
int fieldname;   //====> 필드(Field) 객체의 데이터가 저장되는 곳

//생성자
ClassName() { } //====> 생성자(Constructor) 객체 생성 시 초기화 역할 담당

//메소드
void methodName() { } //====> 메소드(Method) 객체의 동작에 해당하는 실행 블록

}
  • 필드변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸된다.
  • 필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재한다.
  • 선언 형태는 변수와 비슷하지만 변수라고 부르지 않는다.
  • 생성자생성자의 역할은 객체 생성 시 초기화를 담당한다.
  • 생성자는 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어 있고 리턴 타입이 없다
  • new 연산자로 호출되는 특별한 중괄호 { } 블록이다.
  • 메소드메소드를 호출하면 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행된다.외부(호출한 곳)으로부터 매개 값을 받아 실행에 이용하고, 실행 후 결과 값을 외부(호출한 곳)으로 리턴할(돌려 줄)수도 있다.
  • 메소드는 객체 간의 데이터를 전달하는 수단이다.
  • 객체의 동작에 해당하는 중괄호 { }블록 이다. 중괄호 블록은 이름을 가지는데 이것이 메소드 이름이다.

오늘 공부한거

  • ㄴㅇㅇㅇㅇ

'Java' 카테고리의 다른 글

조건이 여러 개 일 때 간단히 표현되는 switch-case 문  (0) 2022.10.02
여러 조건의 경우  (0) 2022.10.02
조건문 IF  (0) 2022.10.02
변수  (0) 2022.10.01
자료형  (0) 2022.10.01