자바 Exception 핸들링

Exception

- 프로그램이 핸들링할 수 있는 경우를 Exception이라고 한다.

- 처리가 가능하다.

- checked exception(complie time)

+ 실행하기 이전 예측가능하다.

+ 파일 확인할때 에러,SQL관련

+ 이클립스,인텔리제이등 ide가 컴파일 할때 체크 해준다.

- unchecked exception(runtime)

+ 실행해야 알 수 있다.

+ 실행시 객체생성없는경우(NullPointer), Array싸이즈가 안맞는 에러등이 있다.

Error

- 핸들링이 불가능해 회복이 불가능하다. 대표적으로 OOM(메모리문제)가 있다.


Exception 핸들링 방법

try, catch block

- 블럭을 설정해 Exception을 처리해준다.

throws

- 메소드 선언부에서 사용한다.

- 메소드를 불러오는 메소드에 책임은 전가한다.

- Exception이 생기면 던져준다.

throw(인위적 Exception 발생)

- Exception이 필요한 상황에 개발자가 Exception을 발생시킨다.

- try, catch나 throws를 사용해야한다.

자바에서 static개념

- 객체지향프로그램인 자바는 객체,변수등이 필요할때 메모리에 올려야한다.

- static은 프로그램으로 객체생성이전 JVM에 클래스가 로딩될때 메모리에 올라온다.

- 변수,메소드,내부클래스에서 static을 사용가능하다.

- 변수,메소드에서 자주사용한다.

- 변수에 static이 붙게 되면 Class로 접근 가능하다.

- 전역변수가 필요할때 static을 사용한다.

- 메소드에 static이 붙게되면 Class로 접근가능하다.

- 대표적인예제 public static void main(String[] args)


abstract와 Interface의 차이

SuperClass와 subClass로 구성된건 같다.

서브클래스는 슈퍼클래스의 큰 영향을 받는다.


abstactClass

- 슈퍼클래스가 어느정도 구현되어있고 나머지를 서브클래스에서 구현해야할때사용한다.

- single inheritance이다.(다중상속불가능)

- 모든 접근제한자에서 가능하다.

- 일반적인 변수,상수가 사용가능하다.

- abstractMethods,concreteMethods 둘다 가능하다.


Interface

- 실질적인 구현이없는 abstractMethods만있는 빈깡통클래스

- 일종의 규약을 위해 생성한다.

- 상속이아닌 구현으로 다중구현이 가능하다.

- public만 가능하다.

- 오직 상수만이 가능하다.

- abstractMethods만가능하다.

오버라이딩

overriding

- 부모 클래스로 부터 상속받은 메소드를 자식클래스에서 다시구현한다.

- 자식클래스에서 입맛에 맞게 다시 구현

- 메소드에 파라미터,리턴타입은 부모,자식클래스이 같아야한다.

- 자식클래스에서 필요해의해 다양하게 수정하기 위해서이다.


오버로딩

overloading

- 같은 클래스안에서 이름이 같은 메소드를 말한다.

  - 이름은 같은 메소드지만 다양한 파라미터를 받아서 처리할때 사용한다.

- 파라미터가 달라야한다.

- 리턴타입은 같지않아도 된다.

String 생성 방법의 차이

1. String s1 = new String("Java");

2. String s2 = "Java"; <-리터럴방식

1번 방식으로 생성하게 되면 힙메모리에 올라가게된다.

2번 방식으로 생성하게되면 자바1.7이후 힙메모리안 StringPool이라는 특정메모리안에 올라가게된다.

2번 방식은 값이 같을 경우 같은 주소를 보게된다.


즉, == 로 비교하게되면 주소값을 비교하게되는데 2번방식으로 생성할때만 비교할 수 있다.

.equals()방식은 문자열을 비교하는 것이기 때문에 모두 가능하다.


즉, new()로 생성하면 힙메모리에 생성되고 ""로 생성하게되면 힙메모리안 StringPool에 생성되어 재사용가능하다.



파일입출력

파일을 열고닫기

- 파일 입출력 변수는 FILE 형식의 포인터 변수로 선언한다.

- 파일을 열 때는 fopen() 함수를 이용한다.

- 파일을 닫을 때는 fclose() 함수를 이용한다.


파일 열기함수 fopen()

- fopen() 함수는 파일 경로와 접근방식을 설정할 수 있다.

- 기본 경로는 현재 프로그램의 경로이다.

- 접근방식은 아래와같다

+ r = 파일에 접근하여 데이터를 읽는다.

+ w = 파일에 접근하여 데이터를 기록한다.(파일이 이미 존재하면 덮어쓴다)

+ a = 파일에 접근하여 데이터를 뒤에서부터 기록한다.


파일 입출력함수 fprintf(),fscanf()


파일 입출력과정

- 파일 입출력은 열고,읽고/쓰고,닫기 과정을 꼭해야한다.

- 파일 열때 포인터를 이용해 메모리가 동적으로 할당된다.

- 파일 작업후 파일을 닫지않으면 할당된 메모리는 계속 남는다.

+ex) 메모장을 틀어놓고 닫지 않으면 계속 켜져있다.


기본txt파일저장

실습내용


실습결과


기본txt파일불러와출력하기

실습내용


실습결과


#if문
x = -10

if x < 0:
print('x는 0보다 작다.')

x = 10

#else문
if x < 0:
print('x는 0보다 작다.')
else:
print('x는 0보다 크다.')

#if else문
x = 0
b = 5
if x < 0:
print('x는 0보다 작다.')
elif x == 0:
print('x는 0이다.')
#if문 안의 if문 사용법
if b == 5:
print('b는 5이다.')
else:
print('x는 0보다 크다.')

"""
if문 출력결과
x는 0보다 작다.
x는 0보다 크다.
x는 0이다.
b는 5이다.
"""

#in,not의 쓰임
#숫자사용할때는 비추천한다.
#아래 코드는 테스트용
a = [1,2,3]
b = 1
if b in a:
print('in')

if 100 not in a:
print('not in')

boolean = False
if not boolean:
print('True가아니다')

#Flase로 판정되는 것들
#Flase, 0, 0.0, '', [], (), {}, set()
str = ''
if str:
print('OK!')
else:
print('NO')

#리스트가 빈값인지 확일할때
str = []
#len(str) 할 필요없다.
if not str:
print('리스트가 비어있다.')



#while문
count = 0;
while count < 5:
print(count)
count += 1

#break문사용
count = 0;
while True:
if count == 5:
break;
print(count)
count += 1

#continue문사용
#2가출력 안된다.
count = 0;
while True:
if count == 5:
break;

if count == 2:
count += 1
continue
print(count)
count += 1

#while else문
#break가 없을때 else문을 실행해라
count = 0
while count < 5:
print(count)
count += 1
else:
print('끝났다')


#집합형
print('---------------')
a = {1,2,3,4,4,4,5,6}
print(a)
print(type(a))
b = {3,4,5,7}
print(a)
print(b)
#a집합에서 b집합을 뺸것
print('---------------')
c = a - b
print(c)
#b집합에서 a집합을 뺀것
print('---------------')
c = b - a
print(c)
#a와 b집합에 모두 있는것(교집합)
print('---------------')
c = a & b
print(c)
#a와 b집합 합친것(합집합)
print('---------------')
c = a | b
print(c)
#a에만 들어있는것
print('---------------')
c = a ^ b
print(b)


#집합의 메소드
s = {1,2,3,4,5,6}
#집합의 값추가하기
print('---------------')
s.add(7)
print(s)
#집합에 값제거하기
print('---------------')
s.remove(1)
print(s)
#집합에 값모두제거
print('---------------')
s.clear()
print(s)

"""
출력결과
---------------
{1, 2, 3, 4, 5, 6}
<class 'set'>
{1, 2, 3, 4, 5, 6}
{3, 4, 5, 7}
---------------
{1, 2, 6}
---------------
{7}
---------------
{3, 4, 5}
---------------
{1, 2, 3, 4, 5, 6, 7}
---------------
{3, 4, 5, 7}
---------------
{1, 2, 3, 4, 5, 6, 7}
---------------
{2, 3, 4, 5, 6, 7}
---------------
set()
"""


#사전형
#{} 중괄호를 사용한다.
#사전형은 해쉬테이블을 가지고 있어서 검색이 쉽다.
d = {'x': 10, 'y':20}
print(d);
#x값 출력
print(d['x'])
#y값 출력
print(d['y'])

#변경 추가는 숫자,문자 다가능
#x값 변경
d['x'] = 'test'
#z값 추가
d['z'] = 123
print(d)

#다양한 사전형 생성방법
d = dict(a=10,b=20)
print(d)
d = dict([('a',50),('b',40)])
print(d)

print('---------------------')
"""
출력결과
{'x': 10, 'y': 20}
10
20
{'x': 'test', 'y': 20, 'z': 123}
{'a': 10, 'b': 20}
{'a': 50, 'b': 40}
---------------------
"""
#사전형 메소드
print(help(d))
print('키,값 보기 ------------------')
#사전 키값만 보기
print(d.keys())
#사전 값만 보기
print(d.values())
print('업데이트하기 ------------------')
#업데이트하기
d2 = {'a':1000,'z':2000}
print(d)
d.update(d2)
print(d)
print('값출력,꺼내기 ------------------')
#사전에 값출력하기
#값이 없으면 에러난다
#print(d['ss'])
#None이 나오고 에러나지 않는다.
print(d.get('ss'))
print(d.get('a'))

#사전값 꺼내기 값이 없어진다.
print(d)
#d사전에서 a값 꺼내기
a = d.pop('a')
print(a)
print(d)

print('값삭제 ------------------')
del d['b']
print(d)
#값 전체삭제
d.clear()
print(d)

print('사전안에 값검색 ------------------')
d = {'x': 10, 'y':20}
print('x' in(d))

#사전 복사하기
print('사전복사하기 ------------------')
d2 = d.copy()
d2['x'] = 12333
print(d)
print(d2)
"""
출력결과
키,값 보기 ------------------
dict_keys(['a', 'b'])
dict_values([50, 40])
업데이트하기 ------------------
{'a': 50, 'b': 40}
{'a': 1000, 'b': 40, 'z': 2000}
값출력,꺼내기 ------------------
None
1000
{'a': 1000, 'b': 40, 'z': 2000}
1000
{'b': 40, 'z': 2000}
값삭제 ------------------
{'z': 2000}
{}
사전안에 값검색 ------------------
True
{'x': 10, 'y': 20}
{'x': 12333, 'y': 20}
"""


#리스트 복사
i = [1,2,3,4,5]
j = i
print('j = ',j)
print('i = ',i)
print('--------------')
j[0] = 100
#i,j의 주소값이 같으므로 값이 모두 변한다.
#참조전달
print('id(j) = ',id(j))
print('id(i) = ',id(i))
print('j = ',j)
print('i = ',i)
print('--------------')

#리스트 복사하기(두개다 가능)
#copy가 명시적으로 더 잘보임
#수치전달
x = j.copy()
x = j[:]
x[0] = 200
print('id(j) = ',id(j))
print('id(x) = ',id(x))
print('j = ',j)
print('x = ',x)
print('--------------')

"""
출력결과
j = [1, 2, 3, 4, 5]
i = [1, 2, 3, 4, 5]
--------------
id(j) = 4499210056
id(i) = 4499210056
j = [100, 2, 3, 4, 5]
i = [100, 2, 3, 4, 5]
--------------
id(j) = 4499210056
id(x) = 4735167240
j = [100, 2, 3, 4, 5]
x = [200, 2, 3, 4, 5]
--------------
"""

#튜플
#()로 표현한다
#데이타 조작 보다는 읽어 쓸때 사용한다.
#질문 보기등에 사용하기 유용하다.
print(help(tuple))
t = (1,2,3,4,1,2)
print(type(t))
print('--------------')
#값변경 안됌
#t[0] = 100
#에러남

#튜플안에 배열을 넣을수 있다
#배열은 수정가능하다
t = ([1,2,3],[4,5,6])
print(t)
t[0][0] = 200
print(t)
print('--------------')

#튜플의 언패킹
t = (10,20)
print(t)
x, y = t
#x, y = 10,20 과 같다.
print(x, y)
#대표적인 사용예
min, max = 0, 100
print(min, max)
#값변경도 가능
min, max = max, min
print(min, max)
print('--------------')
"""
출력결과
<class 'tuple'>
--------------
([1, 2, 3], [4, 5, 6])
([200, 2, 3], [4, 5, 6])
--------------
(10, 20)
10 20
0 100
100 0
--------------
"""


from typing import List

num = 1
name = '1'

#형변환
num = int(name)

print(num , type(num))
print(name, type(name))

#리스트 메소드 정보보기
#print(help(list))

#배열생성
n = [1,2,3,4,5]
#배열 마지막 값 꺼내기
print(n.pop())
#배열 첫번째 값 꺼내기
print(n.pop(0))
#배열 값 보기
print(n[0])
#배열에 값 추가
n.insert(0,100)
print(n)

#배열에 값 제거
del n[0]
print(n)

#배열에 특정 값 첫번째 제거
n.remove(2)
print(n)

a = [1,2,3,4,5]
b = [6,7,8,9,10]

#새로운 배열에 배열 더하기
x = a + b
print(x)

#기존 배열에 배열 더하기
a += b
print(a)

r = [1,2,3,4,5,1,2,3]

#배열안에 값 위치 확인하기
print(r.index(3))

#배열안에 3 갯수 확인
print(r.count(3))

#두번째 3 위치 확인하기
print(r.index(3,r.index(3)+1))

#if문 배열안에 숫자 있나 확인하기
if 5 in r:
print('5가 있다')

#배열 정렬하기
r.sort()
print(r)
#배열 반대로 정렬하기
r.sort(reverse=True)
print(r)
#한단계 전으로 돌리기
r.reverse()
print(r)

#문자열 특정문자 기준으로 배열만들기
s = 'a b c d'
splitTest = s.split(' ')
print(splitTest)

#배열 문자열로 만들기(특정문자 추가가능)
s = ''.join(splitTest)
print(s)

"""
배열 리스트 출력결과
1 <class 'int'>
1 <class 'str'>
5
1
2
[100, 2, 3, 4]
[2, 3, 4]
[3, 4]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2
2
7
5가 있다
[1, 1, 2, 2, 3, 3, 4, 5]
[5, 4, 3, 3, 2, 2, 1, 1]
[1, 1, 2, 2, 3, 3, 4, 5]
['a', 'b', 'c', 'd']
abcd
"""


+ Recent posts