java

반응형

자바는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다.

처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했지만 현재 웹 애플리케이션 개발에 가장 많이 사용하는 언어 가운데 하나이고, 모바일 기기용 소프트웨어 개발에도 널리 사용하고 있다. 현재 버전 14까지 출시했다.(2020년 05월 기준)

출처 위키백과

이 언어는 원래 제임스 고슬링의 사무실 밖에 있던 오크 나무를 따다

오크(Oak), 혹은 그린(Green) 이라고도 불렀으나,  오크(Oak) → 자바(Java)로 개명 후 출시

 

객체지향 언어 (Object-Oriented Programming, OOP)

프로그래밍은 두 가지 방식이 있습니다.

1. 절차 지향

2. 객체지향

 

여기서 소개하는 Java는 객체지향 언어입니다.

 

일단 Java에 대해 설명하라는 질문을 받으면 무조건 나와야 하는 게 객체지향 언어라는 것입니다.

객체지향은 Smalltalk라는 언어에서 처음 개념이 탄생했는데,

 

객체 지향의 장점

 

1. 캡슐화

필요한 속성(Attribute)과 행위(Method)를 하나로 묶고

그중 일부를 외부에서 사용하지 못하도록 은닉한다

관련된 코드와 데이터가 묶여있고 오류가 없어 사용이 편리합니다. 데이터를 감추고 외부 세계와의 상호작용은 메서드를 통하는 방법인데, 라이브러리로 만들어 업그레이드하면 쉽게 바꿀 수 있습니다.

 

2. 상속 (extends)

이미 작성된 클래스를 이어받아서 새로운 클래스를 생성하는 기법으로 위에서 말한 기존 코드를 재활용해서 사용하는 것을 의미합니다. 객체지향 방법의 큰 장점 중 하나입니다.

 

3. 다형성 (Overloading, Override)

하나의 이름(방법)으로 많은 상황에 대처하는 기법입니다. 개념적으로 동일한 작업을 하는 함수들에 똑같은 이름을 부여할 수 있으므로 코드가 더 간단해지는 효과가 있습니다.

 

객체 지향의 단점

 

1. 개발 설계의 복잡함

2. 느려지는 런타임 속도

 

자바 가상 머신( Java Virtual Machine, JVM)

  1. 자바는 ‘바이트코드(Bytecode)’를 생성한다. 바이트코드는 하드웨어에 종속적이지 않은 중간 파일로, 가상 머신을 거쳐 해석·실행하는 구조이다.
  2. 가상 머신으로 자바는 스마트폰, 컴퓨터, Mac, 리눅스 등 서로 다른 기기나 운영체제에서 동일한 프로그램을 개발하고 실행할 수 있다.

자바 플랫폼

  1. 자바 플랫폼은 자바 프로그램이 실행되는 특정 환경을 말한다.
  2. 여러 제약(화면, 입출력 장치, 성능 등) 때문에 모든 하드웨어나 적용 분야에서 동일한 자바를 사용하는 것은 불가능하다. 각 영역에 특화된 자바 플랫폼이 있다.

  • 중요 세 가지
  • JDK(Java Development Kit): 자바 프로그램 개발에 필요한 구성 요소
  • JRE(Java Runtime Environment): 자바 프로그램 실행에 필요한 구성 요소
  • API(Application Programming Interface): 자바 응용 프로그램 개발에 사용하는 라이브러리

자바의 장점

  1. 간결하면서도 강력한 객체지향 언어이다.
  2. 개방형 구조로 여러 기술과 융합이 가능하다.
  3. 플랫폼에 독립적이므로, 여러 운영체제나 하드웨어에서도 동일하게 실행한다.
  4. 많은 오픈소스 프레임워크로 생산성을 증가하고 유지보수 비용을 절감할 수 있다.

자바의 단점

  1. 처리 속도가 중요한 애플리케이션에는 적합하지 않다.
  2. GUI 요소가 많은 MS 윈도 응용 프로그램 개발에는 적합하지 않다.
  3. 하드웨어에 연결하여 제어할 수 없기 때문에(가상 머신 이용) 직접 하드웨어를 정밀하게 조정해야 하는 프로그램 개발에는 적합하지 않다.

자바 프로그램 개발 절차

  1. 자바 프로그램 개발은 자바 소스 코드(. java) 작성 → 자바 컴파일러 → 자바 바이트코드(. class, 컴파일) → 자바 가상 머신(JVM) → 운영체제, 하드웨어 → 실행의 단계로 진행한다.
  2. 바이트코드는 운영체제에 상관없이 가상 머신에서 실행하는 중간 코드이다.

정리

1. 자바(Java) 첫 공개 1995년이고, 제임스 고슬링이라는 선생님(아저씨)이 만들었다. 

2. 하드웨어에 종속적이지 않은 중간 파일로, 가상 머신을 거쳐 해석·실행하는 구조

    (운영체제, 하드웨어 특성을 타지 않는다는 말입니다.)

3. 개발할 땐 무조건 JDK를 받고, 자바로 만들어진 프로그램만 사용 시 JRE를 받자 (귀찮으니까 무조건 JDK)

4. 객체 지향 언어 (Object-Oriented Programming, OOP)

반응형

'java' 카테고리의 다른 글

[Java] 추상 클래스  (0) 2019.10.26
[Java] 예약어 정리  (2) 2019.10.23
[Java] 지역변수와 전역변수  (1) 2019.10.23
[Java] 기본 자료형 9가지 문법 총 정리 (Feat.String,int)  (0) 2019.10.22
[Java] 컬렉션(Collection)이란?  (0) 2019.09.16
반응형

변수와 자료형

  1. 변수는 프로그램에서 데이터를 저장하는 공간을 말하고, 자료형은 변수에 저장할 데이터의 유형을 말한다.
  2. 변수 이름 규칙
    • 변수 이름의 길이에는 제한이 없다.
    • 반드시 문자나 언더바(_), 달러 기호($)로 시작해야 한다.
    • 자바의 연산자(+, -, *, /)는 변수 이름에 넣을 수 없다.
    • 대소문자를 구분한다(int result와 int Result는 다른 변수).
    • 첫 글자에 숫자가 올 수 없고, 이름 사이에 빈칸을 넣어서도 안 된다. 빈칸 대신 언더바(_)를 사용한다.
    • 자바의 키워드(예약어)는 변수 이름으로 사용할 수 없다. https://java119.tistory.com/21
  1. 자바에서 변수 선언은 명시적으로 데이터형을 지정하게 되어 있으며, 선언된 데이터 유형과 대입된 데이터값에 차이가 있을 때 오류나 오버플로, 언더플로가 발생하므로 주의한다.
  2. 자바의 변수는 유형에 따라 인스턴스 변수, 클래스 변수, 지역 변수, 파라미터로 구분한다.
  3. 자바에서 지원하는 기본 자료형(Primitive Data Types)은 크게 정수형, 실수형, 논리형으로 나눈다.

 

정수형 타입

 

byte 변수이름

byte a = -128;
byte b = 127;

char(문자 타입) 변수이름

char a = 'a';

short 변수이름

short a = -32768;
short b = 32767;

 

int 변수이름(가장 많이 쓰임)

int a =  -2147483648;
int b = 2147483647;

long 변수이름

long a = 123567890L; //끝에 L  붙여야함 .
long b = 123567890l; // 소문자 l 가능

 

크기순

1.long 8바이트

2.int 4바이트

3.short 2바이트

4.char 2바이트

5.byte 1바이트

 

실수형 타입

 

float 변수이름

float a = 123f;

 

double 변수이름

double a = 12323232.4242;

 

크기순

1.double 8바이트

2.float 4바이트

 

논리형 타입

 

boolean 변수이름

boolean a = true;

 

크기순

1.boolean 1바이트

 

클래스(문자열) 타입

 

String 변수이름

String str1 = new String("hello JAVA!");
String str2 = "hello JAVA!";
String str3 = new String("");

 

 

 

반응형
반응형

Java Collections Framework(JCF)

 

Java에서 컬렉션(Collection)이란 데이터의 집합, 그룹을 의미하며 

 

JCF(Java Collections Framework)는 이러한 데이터, 자료구조인 컬렌션과 이를 구현하는 클래스를 정의하는 인터페이스를 제공한다.

 

다음은 Java 컬렌션 프레임워크의 상속구조를 나타낸다.

상위 인터페이스 크게 분류

List

Set

Queue

 

그리고 Map 같은 경우는 Collection 인터페이스를 상속 받고 있지 않지만 Collection 으로 분류됨

 

1. Set 인터페이스

 

순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.

  • HashSet
    - 가장빠른 임의 접근 속도
    - 순서를 예측할 수 없음

문법(복붙용)

import java.util.HashSet;

public class CollectionTemp {

	public static void main(String[] args) {
		
			HashSet<String> hs = new HashSet<String>(); // HashSet 선언
		
			hs.add("홍길동");
			hs.add("아기장수 우투리");
			hs.add("홍길동");
			hs.add("춘향");

			System.out.println(hs);

			
	}

}

//결과 [홍길동,춘향,아기장수 우투리]
// 홍길동을 두번 넣었음에도 한번만 값이 넣어져있다. (HashSet의 특성인 중복값 무시)
  • TreeSet
    - 정렬방법을 지정할 수 있음
import java.util.TreeSet;

public class CollectionTemp {

	public static void main(String[] args) {
		
			TreeSet<String> ts = new TreeSet<String>();
			
			   	ts.add("apple");
		        ts.add("airplane");
		        ts.add("alien");
		        ts.add("disc");
		        ts.add("dance");
		        
		        System.out.println(ts.headSet("b"));
		        System.out.println(ts.subSet("a", "al"));
		        System.out.println(ts.tailSet("c"));
			
	}

}
//결과 : [airplane,alien,apple] ts.headSet("b") 시작이 b 보다 작은 a로 시작하는 데이터들
//		 [airplane]  ts.subSet("a", "al") a ~ al 사이에 있는 데이터 from ~ to 
//		 [dance,disc] ts.tailSet("c") headSet의 반대 시작이 c 보다 큰 d부터 시작하는 데이터들

 

HashSet vs TreeSet 

 

HashSet과 TreeSet 모두 중복을 허용하지 않고 순서가 없는 컬렉션

1. 구현 방식
 - HashSet은 해싱을 이용하여 구현
 - TreeSet은 이진탐색트리를 이용하여 구현

2. 속도 비교
 - HashSet > TreeSet
 - 해싱이 이진탐색트리보다 빠르다

3. 정렬 기능
 - HashSet < TreeSet
 - 이진탐색트리를 이용했기 때문에 데이터 정렬이 가능 (Comparator 이용)

 

성능

HashSet > TreeSet > LinkedHashSet

 

예시) 이런 상황을 가정해보겠습니다.

어떤 웹 사이트에서 하루에 접속하는 사람들 수를 구하고자 합니다.

접속하는 IP를 세면 되겠죠.

근데 한사람이 여러번 접속하면 한 IP가 여러번 찍힐 것입니다.

이건 한번으로 카운트 해줘야 제대로 된 접속자 수를 구할 수 있습니다.

이럴 때 쓰는게 Set입니다.

그냥 수학에서 집합 이라고 보시면 됩니다.

 

2. List 인터페이스

 

순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다.

  • LinkedList
    - 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 되기에 유용
    - 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰임
  • Vector
    - 과거에 대용량 처리를 위해 사용했으며, 내부에서 자동으로 동기화처리가 일어나 비교적 성능이 좋지 않고 무거워 잘 쓰이지 않음
  • ArrayList
    - 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어남

 

3. Map 인터페이스

 

키(Key), 값(Value)의 쌍으로 이루어진 데이터으 집합으로,

순서는 유지되지 않으며 키(Key)의 중복을 허용하지 않으나 값(Value)의 중복은 허용한다.

  • Hashtable
    - HashMap보다는 느리지만 동기화 지원
    - null불가
  • HashMap
    - 중복과 순서가 허용되지 않으며 null값이 올 수 있다.
  • TreeMap
    - 정렬된 순서대로 키(Key)와 값(Value)을 저장하여 검색이 빠름

 

 

반응형

+ Recent posts