반응형

*거품 정렬 (Bubble sort)

- 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름으로, 두 인접한 원소를 검사하여 정렬하는 방법으로 시간 복잡도가 O(n^{2})로 상당히 느리지만, 코드가 단순하여 자주 사용된다. 

class Main {
	public static void main(String[] args) {
		int[] arr = {60, 50, 100, 30, 20, 10};
		
		// 오름차순 정렬 ( 작은것 > 큰것 )
		for ( int i = arr.length-1; i > 0; i-- ) {
			for ( int k = 0; k < i; k++ ) {
				if ( arr[k] > arr[k+1] ) {
					int temp = arr[k];
					arr[k] = arr[k+1];
					arr[k+1] = temp;
				}
			}
		}
		
		// 출력 : 10 20 30 50 60 100
		for ( int i = 0; i < arr.length; i++ ) {
			System.out.printf("%d ", arr[i]);
		}
		
		System.out.print("\n");
		
		// 내림차순 정렬 ( 큰것 > 작은것 )
		for ( int i = arr.length-1; i > 0; i-- ) {
			for ( int k = 0; k < i; k++ ) {
				if ( arr[k] < arr[k+1] ) {
					int temp = arr[k];
					arr[k] = arr[k+1];
					arr[k+1] = temp;
				}
			}
		}
		
		// 출력 : 100 60 50 30 20 10
		for ( int i = 0; i < arr.length; i++ ) {
			System.out.printf("%d ", arr[i]);
		}
	}
}

 

 

반응형

'기타' 카테고리의 다른 글

자바 큰 수의 사칙연산  (0) 2020.04.28
이클립스 사용방법  (0) 2020.04.27
지역 변수와 인스턴스 변수란?  (0) 2020.04.24
클래스와 객체란?  (0) 2020.04.24
자바 가상 머신, 바이트코드  (0) 2020.04.23
반응형

*지역 변수

- 이름에서 느낄 수 있듯이 한 지역내에서만 사용할 수 있는 변수이다. 여기서 지역이란 중괄호에 의해 만들어지는 영역을 의미하며, main 함수내의 변수들도 다 지역변수이다. main 함수 내의 지역변수는 다른 함수 내에서 사용할 수 없으며, main 함수 내의 지역변수를 다른 함수에서 사용하기 위해서는 인자값으로 넘겨주거나, 전역변수로 선언한 후 사용해야 한다. 다른 함수에서 선언된 지역 변수를 main 함수에서 사용하기 위해서는 변수를 return 한 후에 main 함수에서 따로 저장한 후 사용해야 한다.

 

*인스턴스 변수 (instance variable)

- 클래스가 있는 객체 지향 프로그래밍에서 인스턴스 변수는 클래스에 정의된 변수로, 각각의 인스턴스화된 클래스의 객체가 별도의 사본이나 인스턴스를 가지고 있다. 인스턴스 변수는 클래스 변수와 비슷하다. 각 인스턴스 변수는 오브젝트의 소유 기간 동안 메모리에 상주한다. 오브젝트의 모든 인스턴스들은 자신만의 인스턴스 변수의 사본을 가지고 있으며, 값이 객체마다 동일하다고 하더라도 그러하다. 하나의 객체 인스턴스는 다른 모든 인스턴스에 영향을 미치지 않고서도 인스턴스 변수들의 값을 바꿀 수 있다. 인스턴스 변수들은 메소드가 정적으로 선언되어 있지 않은 경우 모든 클래스 메소드들에 의해 사용될 수 있다.

반응형

'기타' 카테고리의 다른 글

이클립스 사용방법  (0) 2020.04.27
거품 정렬(Bubble sort)이란?  (0) 2020.04.24
클래스와 객체란?  (0) 2020.04.24
자바 가상 머신, 바이트코드  (0) 2020.04.23
컴파일(Compile) 이란?  (0) 2020.04.23
반응형

*클래스 (class)

- 객체지향 프로그래밍(OOP)에서 특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀이다. 객체를 정의 하기 위한 상태(멤버변수)와 메서드(함수)로 구성된다. 클래스는 전부 혹은 일부를 그 클래스 특성으로부터 상속받는 서브클래스를 가질 수 있으며, 클래스는 각 서브클래스에 대해 수퍼클래스(부모클래스)가 된다.

 

*객체 (object)

- 클래스에서 정의한 것을 바탕으로 실제 저장공간인 메모리에 할당된 것으로, 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미한다.

- 절차적 프로그래밍에서 하나의 객체는 자료, 명령을 포함할 수 있지만 두 가지를 동시에 포함하지는 않는다. 객체지향 프로그래밍에서 객체는 클래스의 인스턴스이다. 클래스 객체는 자료와 그 자료를 다루는 명령의 조합을 포함하여 객체가 메시지를 받고 자료를 처리하며 메시지를 다른 객체로 보낼 수 있도록 한다.

반응형

'기타' 카테고리의 다른 글

거품 정렬(Bubble sort)이란?  (0) 2020.04.24
지역 변수와 인스턴스 변수란?  (0) 2020.04.24
자바 가상 머신, 바이트코드  (0) 2020.04.23
컴파일(Compile) 이란?  (0) 2020.04.23
컴퓨터의 저장 단위(비트, 바이트)  (0) 2020.04.23
반응형

*자바 가상 머신, 바이트코드

1. 자바 가상 머신 ( JVM : JAVA Virtual Machine )

- 시스템 메모리를 관리하면서 자바 실행 환경을 제공하며, 다른 프로그램을 실행 시키기 위한 목적으로 사용된다. 자바 가상 머신은 자바 프로그램이 어떠한 기기, 운영체제 상에서도 실행될 수 잇는 환경을 제공하고, 프로그램 메모리를 관리하고 최적화 한다.

- 자바 가상 머신의 특성

  • 스택 기반의 가상 머신
  • 단일 상속 형태의 객체 지향 프로그래밍을 가상 머신 수준에서 구현
  • 포인터를 지원하되 C와 같이 주소 값을 임의로 조작이 가능한 포인터 연산이 불가능
  • 가비지 컬렉션 사용
  • 모든 기본 타입의 정의를 명확히 함으로써 플랫폼 독립성 보장
  • 데이터 흐름 분석에 기반한 자바 바이트코드 검증기를 통해 스택의 넘침, 명령어 피연산자의 타입 규칙 위반, 필드 접근 규칙 위반, 지역 변수 초기화 전 사용 등 문제를 실행 전 검증하여 실행 시 안전을 보장하고 부담을 줄여준다.
  • 명령어에서 스택에서 가져올 피연산자의 타입을 명령어에 지정

 

2. 바이트 코드 (Bytecode, portable code, p-code) 

- 바이트 코드는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한  이진 표현법이다. 하드웨어가 아닌 소프트웨어에 의해 처리되기 때문에, 보통 기계어보다 더 추상적이다.

- 바이트코드는 대부분의 명령 집합이 0개 이상의 매개 변수를 갖는 1바이트 크기의 동작 코드였기 때문에 바이트코드라 불리게 되었다. 

- 바이트코드는 특정 하드웨어에 대한 의존성을 줄이고, 인터프리팅도 쉬운 결과물을 생성하고자 하는 프로그래밍 언어에 의해, 출력 코드의 한 형태로 사용된다. 

- 컴파일되어 만들어진 바이트코드는 특정 하드웨어의 기계 코드를 만드는 컴파일러의 입력으로 사용되거나, 가상 컴퓨터에서 바로 실행된다.

 

3. 자바 바이트 코드 (Java bytecode) 

- 자바 바이트코드는 자바 가상 머신이 실행하는 명령어의 형태이다. 

- 각각의 바이트코드는 1바이트로 구성되지만 몇 개의 파라미터가 사용되는 경우가 있어 총 몇 바이트로 구성되는 경우가 있다. 

- 256개의 명령코드 모두가 사용되지는 않는다.

- 자바 프로그래머가 자바 바이트코드를 꼭 인지하거나 이해할 필요는 없다. 하지만, 바이트코드를 이해하고 자바 컴파일러에 의해 바이트코드가 어떻게 생성될 것인지를 이해하는 것은 C, C++ 프로그래머가 어셈블리어를 이해하는 것과 같다고 볼 수 있다.

반응형

'기타' 카테고리의 다른 글

지역 변수와 인스턴스 변수란?  (0) 2020.04.24
클래스와 객체란?  (0) 2020.04.24
컴파일(Compile) 이란?  (0) 2020.04.23
컴퓨터의 저장 단위(비트, 바이트)  (0) 2020.04.23
자바 문자열 공백제거(replaceAll, trim)  (0) 2020.04.22

+ Recent posts