티스토리 뷰

IT/JAVA

4. Java 클래스 기본 개념

a-toz 2017. 11. 9. 18:47

**정렬(Sorting)

=>데이터를 순서대로 나열하는 것

1.정렬의 목적

=>데이터를 자주 검색해야 하는 경우 정렬이 되어 있지 않으면 데이터를 순서대로 하나씩 비교하면서 검색해야 하기 때문에 효율이 많이 떨어지는데 데이터를 정렬해 놓으면 가운데에서부터 비교해서 작으면 왼쪽 크면 오른쪽의 형태로 검색할 수 있기 때문에 순차검색보다는 적은 비교횟수로 데이터를 검색할 수 있기 때문입니다.


2.정렬의 종류

 1)배치 방법에 따른 분류

 - Ascending(오름차순): 작은 것에서 큰 것 순으로 배치하는 것으로 정렬의 기본

 - Descending(내림차순): 큰 것에서 작은 것 순으로 배치하는 것


 2)정렬 알고리즘에 따른 분류

 - selection(선택), bubble, insertion(삽입), quick, merge 등 종류가 많음

 - 코딩 테스트에서는 quick sort가 가장 중요


3.selection sort

=>처음부터 마지막 바로 앞 자리까지를 기준으로 해서 기준의 뒤에 있는 모든 데이터와 비교해서 더 작은 데이터를 만나면 2개의 데이터를 교체하는 방식 - 내림차순은 부등호 반대


  30 40 10 50 20

 기준:0 비교:1-4        10 40 30 50 20

 기준:1 비교:2-4    10 20 40 50 30

 기준:2 비교:3-4    10 20 30 50 40

 기준:3 비교:4-4    10 20 30 40 50


기준: 0 - 3(개수-2)

비교: 기준+1 - 4(개수-1)


**프로그래밍

1.Machine Language: Hardward가 바로 인식할 수 있는 언어

                    0과 1로만 프로그래밍


2.Assembly : 기계어를 인간이 조금 더 쉽게 사용할 수 있도록 번역한 언어 : 모든 프로그래밍언어는 어셈블리로 번역되서 실행됩니다.


============= 전자 공학 이나 회로 설계 등에서 사용 ==============

고급 프로그래밍언어 - 인간이 알아보기 쉬운 언어


1.구조적 프로그래밍 언어 : 프로그램을 블럭단위로 나누어서 작성 할 수 있는 프로그래밍 언어 - C언어, C++, Java, C#, Python 등등

=>거의 모든 언어는 { }로 블럭을 만들지만 파이썬은 들여쓰기로 블럭을 만듭니다.


2.절차적 프로그래밍 언어 : 프로그램을 작성하는 순서가 있는 프로그래밍 언어 - C언어(변수를 만드는 부분이 처리하는 부분보다 먼저나와야 합니다.)


3.객체 지향 언어 : 작성 순서에 상관없이 관련성 있는 데이터와 로직(함수, 메서드)을 묶어서 하나의 객체로 만들어서 사용하는 언어

사용하기 전에 생성만 되어 있으면 되는 언어

- C++, Python, Objective-C:불 완전한 객체 지향 언어(일부분만 객체 안에 존재)

- Java, C# : 완전한 객체 지향 언어(전부 객체 안에 존재)


4.스크립트언어(일반화 프로그래밍): 데이터의 자료형을 선언할 때 결정하지 말고 데이터를 대입할 때 결정하고 프로그램을 행 단위로 실행할 수 있도록 만든 언어

=>JavaScript, Python, Ruby, R, Swift(iOS - Mac, iPhone), 코틀린(안드로이드 표준언어로 제정) 등


운영체제와 관련된 프로그래밍이나 H/W를 직접 제어하는 프로그램 또는 빠르게 실행되어야 하는 프로그램은 C&C++ 로 제작하는 것이 유리


간단한 응용프로그램이나 웹 프로그램 등을 개발할 때는 Python이 유리


윈도우에서만 돌아가는 응용프로그램을 만들 때는 C#(VC#)이 유리


대규모 처리를 기반으로 하는 웹 애플리케이션이나 응용프로그램을 만들 때는 Java가 유리 - 금융권 이나 관공서 프로젝트


응용 프로그램을 직접 만들지는 않고 데이터 분석 결과 만을 도출하고 시각화를 수행하고자 할 때는 R 이 유리


LG Smart TV 나 삼성의 타이젠 같은 경우는 JavaScript 라이브러리를 제공하기 때문에 JavaScript를 이용하는 것이 유리


일본에 웹 프로그래밍을 할 때는 Ruby(일본 개발자들이 만들었음)를 선호


 UNIX(95% 이상이 C언어) - 상용화

 무료 UNIX - LINUX(CLI 기반의 운영체제)

 사용자 GUI 환경에서 명령어를 입력 -> Mac OS X(Windows, iOS, Android, Web OS, Tizen 등)  -> Linux


**객체 지향 프로그래밍

1.객체 지향 프로그래밍의 3대 특징

=>캡슐화 : 클래스를 만드는 것

=>상속: 상위 클래스의 모든 멤버를 하위 클래스가 물려받는 것

=>다형성: 하나의 코드가 상황에 따라 다른 메소드를 호출하는 것

=>객체 지향 언어를 공부할 때는 3가지 특징을 나타내는 부분만 정확하게 보면 됩니다.


2.객체 지향 프로그래밍의 장점

=>코드를 클래스 단위로 묶어두기 때문에 재사용성이 증가

=>중복된 코드를 줄일 수 있기 때문에 유지보수가 쉬워집니다.


3.클래스와 객체

=>클래스는 객체를 만들기 위한 모형 : 틀, 템플릿, 사용자 정의 자료형

=>객체(Object, Instance - 요즈음 많이 사용): 클래스를 기반으로 만들어진 실제 데이터

=>객체는 클래스가 없으면 만들어지지 않습니다.

=>클래스는 샘플모형이고 객체는 샘플모형을 기반으로 해서 각각의 특징을 갖는 제품입니다.


=>클래스는 한번 사용되면 여러 번 사용될 가능성이 높기 때문에 영구적인 영역(static, method, 클래스영역)에 저장하고 사용하며 객체는 삭제가 가능한 heap 영역에 생성해두고 사용합니다.

=>클래스는 1번만 만들어지지만 객체는 여러 번 만들 수 있습니다.


4.클래스 의 구성 요소

=>속성: 데이터를 저장하기 위한 변수

=>메소드(method): 작업을 하기 위한 함수

=>생성자(Constructor): 객체를 만들기 위한 함수

=>내부 클래스


5.클래스 만들기

[public | 생략] class 클래스이름{

클래스 내용

}


=>public 이 붙으면 이 클래스는 모든 곳에서 사용 가능

=>public 이 없으면 이 클래스는 현재 패키지 내에서만 사용 가능

=>클래스 이름은 첫글자를 대문자로 하는 것이 관례


6.객체 만들기

클래스이름 변수명 = new 클래스이름();

=> 클래스를 가지고 객체를 생성해서 heap에 저장한 후 그 주소를 변수에 대입


**변수(Variable)-속성(Attribute, Property, Field)

=>데이터를 저장하기 위한 메모리 공간에 붙여둔 이름

1.저장하는 데이터 종류에 따른 분류

1)기본형: boolean, byte, short, char, int, long, float, double

=>메모리 공간에 값을 저장하는 자료형


2)참조형: 배열, 클래스, enum 

=> 메모리 공간에 데이터의 주소를 저장하는 자료형


2.저장되는 위치에 따른 분류

1)Local Variable(지역변수) : 메소드 나 제어문 안에서 만들어진 변수로 스택에 저장되고 스택이 소멸되면 자동으로 소멸되는 변수

main(String [] args){

여기 안에서 생성된 변수는 전부 지역변수

}


=>여기 만들어진 변수는 처음에 값을 대입하지 않으면 만들어지지 않은 것 입니다. - 초기화가 자동으로 이루어지 않습니다.


2)Member Variable(멤버변수, 인스턴스변수) : 클래스 안에 접근지정자와 함께 선언하고 메모리 할당은 각각의 객체가 받아서 사용하는 변수

객체가 생성될 때 마다 별도로 생성되는 변수

이 변수는 아무것도 대입하지 않으면 0(숫자) 또는 false(boolean) 또는 null(참조형)로 초기화됩니다.

heap 메모리에 생성됩니다.


3)Static Variable(클래스 변수) : 클래스 안에 접근지정자와 static 이라는 예약어와 함께 선언하고 메모리 할당은 클래스 안에 1개만 하는 변수

이 변수는 아무것도 대입하지 않으면 0(숫자) 또는 false(boolean) 또는 null(참조형)로 초기화됩니다.

영구적인 영역(static, method)에 생성됩니다.


**접근지정자

=>클래스 안에 변수나 메소드를 만들 때 사용할 수 있는 범위를 지정하기 위한 예약어


1.private : 클래스 내부에서만 사용

2.package(생략, default) : 패키지 내에서는 public 외부에서는 private

3.protected : 클래스 내부와 상속받은 클래스 내부에서만 사용 가능

4.public : 클래스 내부 또는 외부에서 객체로 접근할 수 있도록 해주는 것


**클래스나 객체가 내부 데이터를 접근하는 방법

클래스 또는 객체 . 내부 데이터









































































'IT > JAVA' 카테고리의 다른 글

6. Java 주요 클래스  (0) 2017.11.09
5. Java 상속과 다형성  (0) 2017.11.09
3. Java 제어문  (0) 2017.11.09
2. Java 연산자  (0) 2017.11.09
1. 자바의 개요  (0) 2017.11.09
댓글