728x90

 

Wrapper class(래퍼 클래스)

기본자료형을 클래스화 시킨 것

기본자료형을 객체화 해주는 클래스

 

기본형 데이터타입을 클래스화하면 Object 클래스의 자식 클래스가 되며,

데이터타입에 상관없이 Object클래스를 이용한 처리가 가능해진다

 

 

Wrapper class 출현 배경

기본 자료형들은 ‘자료형’으로만 사용, 메소드 사용불가. 그래서 래퍼클래스가 나오게됨

 

*기본자료형 8가지

boolean char byte int short long float double

 

Wrapper 래퍼클래스는 참조 자료형

클래스 자체가 자료형으로 사용가능하기에 래퍼클래스도 자료형으로도 사용 가능하고, 그 안에 메소드도 활용가능

 

기본 자료형(primitive)

    - 자료형 사용 o, 메소드 사용x

참조 자료형(non-primitive, reference type)

(Wrapper Class = 참조형)

    - 자료형 사용 o, 메소드 사용 o

 

기본 자료형 Wrapper Class
boolean Boolean
char Character
byte Byte
int Integer
short Short
long Long
float Float
double Double

 

 

boxing vs unBoxing

기본자료형 vs Wrapper클래스

  • boxing : 기본자료형 → wrapper클래스로 변환(객체화)
  • unBoxing : wrapper클래스 → 기본자료형으로 변환
    • 객체에 저장되어 있는 데이터를 기본형 데이터로 꺼내는 작업

 

Wrapper클래스가 박스

안에 메소드,필드 등 담아두기에 박스

반대로 박스(객체)에 저장되어 있는 데이터를 기본형 데이터로 꺼내는 작업이 언박싱

// boxing
int num1 = 10;
Integer integer1 = new Integer(**num1**); // num1 자체를 래퍼클래스로 전환 -> boxing

// unBoxing
int num2 = integer1.**intValue();**       // num2 : 래퍼클래스를 기본자료형 int로 변환 -> unBoxing
// boxing
int i = 10;
Integer iValue1 = new Integer(i); 
Integer iValue2 = new Integer(123);

double d = 1.123;
Double dValue1 = new Double(d); 
Double dValue2 = new Double(5.323);
// unBoxing
Integer iValue = new Integer(4578); 
int i = iValue.intValue();

Double dValue = new Double(44.241); 
double d = dValue.doubleValue();

 

 

autoBoxing, autoUnBoxing

JDK1.5버젼부터 지원

자동으로 박싱,언박싱

기본 타입과 Wrapper클래스 타입 간의 변환이 자동으로 이루어진다

(바로 대입적용이 가능케됨)

// 자동박싱,언박싱. 바로 대입적용이 가능케됨
Integer integer2 = num1; // autoBoxing
int num3 = integer2;     // autoUnBoxing
int i = 10; 
Integer iValue = i; // 바로 대입 가능

Double dValue = new Double(3.14); 
double d = dValue;  // 바로 대입 가능

 

 

 

 


 

 

 

1)String을 기본 자료형으로 바꾸기

parsing(파싱)

기본자료형에서 래퍼클래스로 변환하기 위해 많이 사용하는게 파싱(parsing)

parsing : 문자열을 기본 자료형으로 변환하는 것

변환가능한 같은 형태이여야한다

     ex) 숫자면 숫자끼리. 문자열 "1"을 int 1로 변환 가능

int i = Integer.parseInt("10");
double d = Double.parseDouble("홍길동");
// 에러메시지 : java.lang.NumberFormatException: For input string: "홍길동"
// 파싱할 자료형의 형태를 지니지 않아서 나는 에러

short s = Short.parseShort("10 ");		// 잦은 실수 요인 : 공백 조심
float f = Float.parseFloat(" 10");
boolean b = Boolean.parseBoolean("true");
byte by = Byte.parseByte("10");
Long l = Long.parseLong("10");
// 캐릭터 래퍼클래스에는 파싱기능 존재x -> chatAt()로 대체

byte b = Byte.parseByte("1");
short s = Short.parseShort("2");
int i = Integer.parseInt("3");
long l = Long.parseLong("4");
float f = Float.parseFloat("0.1");
double d = Double.parseDouble("0.2"); 
boolean bool = Boolean.parseBoolean("true");

char c = "abc".charAt(0);

 

 

2)primitive type(기본 자료형)을 String으로 바꾸기

String str1 = i + ""; 					   // 방법1. 가장 쉬운 변환.대중적 사용
String str2 = String.valueOf(s); 		   // 방법2
String str3 = Byte.valueOf(by).toString(); // 방법3
String b = Byte.valueOf((byte)1).toString();
String s = Short.valueOf((short)2).toString();
String i = Integer.valueOf(3).toString();
String l = Long.valueOf(4L).toString();
String f = Float.valueOf(0.1f).toString();
String d = Double.valueOf(0.2).toString();
String bool = Boolean.valueOf(true).toString();
String ch = Character.valueOf('a').toString();

 

728x90
반응형
728x90

 

자바 기본 API(Application Programming Interface)

목차

1.String

2.Wrapper

3.Date

  1. Calendar
  2. Gregorian Calendar

4.Math

 


 

String Class

String : 문자열 클래스

문자열의 값 수정 불가(불변 클래스) 수정 시 수정된 문자열이 새로 할당 되어 새 주소를 넘김

String name = "abc";
name = "def"; // <-수정된 거 아닌가? 수정된거 아님
immutable(불변) 의미
배열 크기 변경 불가능처럼
눈으로 보이기는 수정되는 것처럼 보이나 컴퓨터 안에 로직은 삭제 새로생성되었고 주소값도 변경됨

 

 

API에 구현이 되어있는 메소드들

hashCode(), identityHashCode()

 

hashCode()

hashCode() : int ← 매개변수x 주소값 반환

Returns a hash code for this string.

주소값을 보기 위해 사용하는 코드

객체의 주소값을 해시코드로 구현한 결과값

object클래스에 있음.

실제 주소값을 직접 볼 수 있는건 아님.

자바는 애초에 주소값을 다이렉트로 볼 수 없게 만듬

equals비교했는데 둘이 같다면 해쉬코드 결과도 둘이 같게해줘야한다

System.out.println("str1의 hashcode : "+str1.hashCode());
System.out.println("str2의 hashcode : "+str2.hashCode());
System.out.println("str3의 hashcode : "+str3.hashCode());

 

identityHashCode()

System.identityHashCode(변수명)

실주소값을 연산해놓은 결과값을 도출하는 메소드

스트링은 불변 클래스

수정되는게 아닌 새로 생성하고 기존것 삭제하고 대체되는 개념

 


 

StringBuffer & StringBuilder

문자열 클래스

주소값은 그대로하고 문자열을 수정 가능케 하는 메소드

가변클래스 : 문자열 수정 가능. mutable(가변)

    - String클래스 : 변경이 적고 읽기만 많은 경우에 유리

    - StringBuffer / StringBuilder : 문자열에 대한 수정이 많이 일어나는 경우 유리

https://rise-up.tistory.com/303

 

[Java] 주소값은 그대로하고 문자열을 수정 가능케 하는 메소드 : StringBuffer & StringBuilder

StringBuffer & StringBuilder 클래스는 불변 클래스인 String 클래스랑 다르게 문자열 수정이 가능한 가변 클래스다 String이 수정이 불가능하다니 무슨 말일까? String 타입의 변수에 값을 넣어보면 언제든

rise-up.tistory.com

 

 

StringBuffer vs StringBuilder 비교

불변 클래스인 String 클래스랑 다르게 문자열 수정이 가능한 가변(mutable)클래스

문자열 값 수정 가능, mutable(가변) 수정, 삭제 등이 기존 문자열에 수정되어 적용 기본 16문자 크기로 지정된 버퍼를 이용하며 크기 증가 가능

모두 같은 기능이나 동기화처리 가능 / 불가능으로 구별된다

동기화가 들어가면 안전 : 데이터에 대해 락을 걸어놓고 진행. 처리속도가 느림. 동기화가 안들어가면 속도가 빠름

  • StringBuffer   동기화 o / 느림 / 안전 / thread safe기능o
  • StringBuilder 동기화 x / 빠름 / 안전 x / thread safe기능x

 

메모리 관리를 위해 String대신 쓰기도 하나 String을 대개 많이씀

컴퓨터도 많이 좋아지고 버퍼나빌더를 쓴다고 눈에띄게 빨라지는건 아님

StringBuffer/StringBuilder는 자동으로 수용량 증가

 

 

쓰레드 세이프 기능(thread safe)

멀티 쓰레드 프로그래밍에서 여러 쓰레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없는 것을 의미

이를 위해 한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 "임계 영역(critical section)"과 "잠금(lock)"의 개념이 도입됨

 

  • 임계영역(critical section)

둘 이상의 스레드가 동시에 접근해서는 안 되는 공유 리소스(자료 구조 또는 장치)를 접근하는 코드의 일부를 뜻함

  • 락(lock)

모든 객체에는 락(lock)이 하나씩 있고 이 락(lock)을 가지고 있는 스레드만 해당 객체의 임계 영역 코드와 관련된 작업이 가능

  1. 공유 데이터를 사용하는 코드 영역을 임계 영역으로 지정하고, 공유 데이터가 가지고 있는 lock을 획득한 단 하나의 쓰레드만 영역 내의 코드를 수행할 수 있게함
  2. 해당 쓰레드가 임계 영역 내의 모든 코드를 수행하고 벗어나 lock을 반납해야만 다른 쓰레드가 반납된 lock을 획득하여 임계 영역 내의 코드를 수행할 수 있도록함

 

 

쓰레드(thread)의 동기화(Synchronization)

여러 스레드가 한 리소스를 사용하려 할 때

사용하려는 스레드 하나를 제외한 나머지 스레드들은 리소스를 사용하지 못하도록 막는 것

 

쓰레드 동기화는 크게 Synchronized, Volatile, Atomic 3가지가 있고 추후 깊게 공부해보자

 

728x90
반응형
728x90

JDBC(Java DataBase Connectivity)

자바에서 데이터베이스에 접근할 수 있게 해주는 API

JDBC = JAVA + database

     - java 기능구현

     - database 데이터 저장

 

 

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

이 메세지가 뜨는 원인은

  1. 드라이브명 쪽 오타
  2. 해당 라이브러리를 넣지 않아서

아래와 같이 JDBC 구현 코드를 다 잘쓴다 하더라도 에러가 발생한다

 

ojdbc 라이브러리를 이클립스에 로드시켜야한다

ojdbc 라이브러리 위치(11g버젼 기준)

C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib

11g 버젼은 ojdbc6 사용

12버젼 이상은 ojdbc8사용

 

이클립스, 라이브러리 적용방법

프로젝트 우클릭 properties - java build path - Libraries tap으로 이동 - 우측에 Add External JARs... 클릭 - 위의 라이브러리 위치의 ojdbc6 클릭 - apply 클릭

 

잘 적용되었는지 확인 방법

적용이 잘 됬으면 아래 처럼 Referenced Libraries 탭에 ojdbc6.jar가 추가된 것을 확인 할 수 있다

 

728x90
반응형
728x90

 

JAVA1 - 13.5. 자바 문서 보는 법 - 상속(inheritance)

 

JAVA API 문서

PrintWriter클래스를 만든 사람은 처음부터 만들고 싶지 않아서 Writer클래스에서 상속받아 PrintWriter클래스를 만들었고 Writer클래스를 만든 사람은 마찬가지로 Object클래스를 상속받아 쉽게 Writer클래스를 만든

 

*자바에서는 변수 필드라고 함 (Field = variable)

 

 

이클립스에서 상속관계(hierarchy) 보는 방법

[보기 원하는 클래스 위에 우클릭] - [Open tpye Hierarchy 클릭(F4) ]

 

Object 아래 toString 있고 Writer 있음

Object 아래 상속 Writer 아래 상속 PrintWriter 상속

PrintWriter클래스 쓰면 같은 부모 Object 아래 상속 되었기에, Object 아래있는 다른 클래스인 toString 같이 사용가능

 

 

 

자바의 모든 클래스는 Object클래스를 반드시 상속받음

누군가가 Writer라고 하는 어떤 취지를 가진 클래스를 만드는데 필수이기도 하고

Object기능을 사용하기도해서 Object 상속 받는데 이때 사용하는 키워드가 extends

 

 

, Object 확장(extends)해서 Writer 클래스를 만들었다는

마찬가지로, PrintWriter클래스도 Writer 클래스를 확장(extends)해서 만든

 

 

PrintWriter p1 = new PrintWriter("result 1");
p1.toString()

PrintWriter 인스턴스(P1) 만들고 인스턴스에 .toString()이라고 하게되면

상태에서 toString() 오브젝트에 있다고 하면, 자바가 어떻게 동작하는가?

 - PrintWriter클래스에 toString 있는지 보고 없으면 extends 가리키는 Writer 찾아보고 없으면 extends 가리키는 Object 찾아본다. 없으면 에러가 나고 있으면, toString() 메소드를 실행

 


 

Writer클래스는 String 받는 write클래스( write(String) : void  ) 정의되어 있다

PrintWriter클래스에서도 String 받는 write클래스( write(String) : void  ) 정의되어 있다

 - , Writer클래스에도 write메소드가 있는데 Writer클래스를 상속 받는 PrintWriter클래스에도 write메소드가 있는 . 다시말해, 덮어쓰기(overriding)

 

위의 상태에서 write()메소드는 누구의 write 메소드일까?

 - PrintWriter클래스 write(String) : void 사용하는

 

 

덮어쓰기(Override)?

PrintWriter클래스를 만든 사람이 Writer클래스의 write()메소드가 마음에 들지 않거나 취지에 맞지 않는다면 부모클래스의 메소드를 사용하지않고 자식클래스(자신) write()메소드를 사용하는데, 이를 덮어쓰기(overriding) 한다고한다

 


 

<JAVA API 보는법>

Tree

클래스 상속관계(Hierarchy) 있는

 

자바가 기본적으로 제공하는 표준 라이브러리들이 서로 간에 어떤 상속관계를 가지고 있는지 보여준다.

정점에는 역시 Object. 페이지 상단에 위치

 

 

자바에서 변수를 필드라 부름

필드=변수

위의 Fields Summary 의미

위의 lock이라고 하는 변수(필드) Writer()클래스에 정의되어있고 상속받아서 PrintWriter() lock이라는 필드(변수) 사용할 있다는 의미

 

Object클래스로부터 상속받았기 때문에 위의 메소드들은 사용할 있다는 의미

 

 

 

728x90
반응형
728x90

 

 

JAVA1 - 13.1. 자바 문서 보는 법 - API vs UI

 

자바가 기본으로적으로 내장하는 기능들을 '기본 라이브러리' 부름

  ex)System, Date, Math, PrintWriter

 

라이브러리라는 부품을 이용해서 나의 프로그램을 만드는

 

API(Application Programming Interface)

 여기서

Programming 시간에 따라서 실행된다는 시간이 강조된 표현이고,

Application 자바가 기본적으로 제공하는 부품들을 응용(application)해서 만든다라고 하는 응용에 방점이 찍힌 표현.  자바를 응용해서 프로그래밍적으로 실행되는 프로그램을 만들기 위해서 사용해야되는 조작장치들, 조작방법을 API(Application Programming Interface)라고 부른다

 

 

사람이 우리가 만든 프로그램을 조작하기 위해서 조작장치들(web이면 link, desktop app이면 button, 커맨드라인 시스템이면 argument ) UI(User Interface)라고 부름

 

 

동시에 사람이 사용하지 않을 도 있다. 우리가 만든 프로그램이 사람이 아닌 부품으로써 프로그램이 사용할 경우.

우리의 프로그램이 우리의 프로그램을 사용하는 완제품에 해당되는 프로그램에게 API 제공해야한다. 완제품에 해당하는 프로그램도 다른 프로그램의 부품이   있으니 API 해야한다

 

 

 


 

 

JAVA1 - 13.2. 자바 문서 보는 법 - 패키지,클래스,변수,메소드

API의 사용방법을 스스로 알아낼 수 있는 방법을 배워보자

 

 

All Classes탭

일단 클래스는 하나의 프로그램이라고 생각해둬라

수학과 관련된 작업을 해야하는데 직접 만들기 싫다면 API문서에서 검색

Math 검색 - All classes에서 Math 클릭

 

 

 

 

패키지(Package)

정리정돈을 위한 도구

많은 클래스들 있고 이들의 이름이 겹치면 충돌

만약 내가 똑같은 math라는 이름의 클래스를 만들고 싶으면 충돌하기에 있을 수가 없으니 이런 문제를 해결하기 위한 도구가 패키지

위는 java.lang 속한 math클래스고 내가 다른 패키지 이름으로 math라는 클래스를 만들 수도 있는

 java.lang 안에는 Math 외에도 String, System,Thread,float 등등 있다

 

 위의 class math에서 java.lang패키지를 좌측상단 package란에서 찾아보면 있는 것을 있다

패키지는 비슷한 성격의 클래스들을 모아서 이름을 붙인다

 

 

클래스(Class)?

서로 연관된 변수와 메소드를 모아서 거기에 이름을 붙인

class Math 안에 abs, min, max, floor, ceil 등의 메소드가 여기에 속함

패키지와 클래스, 메소드,변수의 상관관계도

 

 

728x90
반응형
728x90

 

출처: <https://www.youtube.com/watch?v=C3P1umV-NOI&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=1>

 

 

[자바의정석-기초편] ch1-1,2 자바란? 자바의 역사

 

자바란?

프로그래밍 언어(programming language)

컴퓨터 프로그램(어플리케이션) 만드는데 사용

실행환경(JRE) + 개발도구(JDK) + 라이브러리(API)

 

*JDK SDK'

java developeement kit : 자바 개발을 위한 SDK JDK라고

software developement kit : 소프트웨어 개발도구

 

*API(Application Programming Interface)?

응용프로그램 인터페이스. 응용프로그램을 작성할 필요한 매개체 의미.

컴퓨터 프로그램은 응용 프로그램과 시스템 프로그램(운영체제) 나뉘고,

시스템 프로그램(운영체제) 이용하여 특정 기능을 하도록 응용해서 만든 프로그램을 응용 프로그램이라 부른다

 

실무 개발에서는 프로그램이 너무 커서 전부 개발할 없기에 이미 만들어진 소프트웨어 컴포넌트를 결합해서 만드는 경우가 많다. 라이브러리도 이중 하나. 컴포넌트들을 결합하기 위한 매개체가 API

소프트웨어 컴포넌트 : tawk 채팅창 기능서비스 api 끌어오는 같은

 

 

*API 라이브러리 차이

라이브러리(Library) : 도서관 . 다른사람들이 만들어놓은 .

   - 프로그램에 자주 쓰일만한 것들을 다른사람들이 만들어 놓은 것들을 제공하는

라이브러리 컴포넌트 자체를 뜻함

API 컴포넌트를 활용하기 위한 규약에 따른 매개체

개발자 로컬 컴퓨터에 설치된 라이브러리를 통하는 것과 외부 서버에서 서비스를 제공받는 API 차이

 

 

자바 사용처

pc애플리케이션, 애플리케이션, 안드로이드(모바일) 어플리케이션, 빅데이터 하둡(hadoop),

게임(마인크래프트),과학,소형기기

 

 

 

 

 

 

[자바의 정석 - 기초편] ch1-3,4 자바의 특징, 자바 가상 머신(JVM)

 

 

자바의 특징

  1. 객체지향 언어
  2. 자동 메모리관리 : 가비지 컬렉터(GC)가 자동관리해줌
  3. 멀티 쓰레드 지원
  4. 운영체제에 독립적 : 자바가상머신(JVM) 위에 가동되고 그 다음 OS와 작동하기 때문에 운영체제에서 자유로운 것

         - JVM 각각 운영체제에 맞게 개발되어 있음

 

*객체지향언어란?

기존 프로그래밍 언어 + 객체지향 개념 도입한

 

 

 

[자바의 정석 - 기초편] ch1-7 자바 API문서 설치와 사용법

 

자바 API?

java 프로그랭 하는데 필요한 주요기능을 미리 만들어서 제공하는

 

자바 API문서란?

java api 제공하는 기능에 대한 상세정보를 제공하는 html파일

 

오라클 사이트에서 다운하면 되며, 각종 패키지,class 설명이 나오므로 자주 찾아볼 !

 ex) 어떤 메소드가 어느 클래스인지 찾을

random 메소드가 어느 클래스인지 모르겠다면 index 탭에서 R 클릭하고 ctrl+F random검색

 

 

728x90
반응형

+ Recent posts