본문 바로가기

IT일반과목/java

자바의 개념 정리(07.02~07.27)

자바

 

표기법

1. 카멜표기법 (낙타표기법)

userName (뜻이달라진부분을 대문자로 표기)

phoneColor (뜻이달라진부분을 대문자로 표기)

->Project일때 사용,

 

2. 파스칼 표기법

UserName (첫단어부터 대문자로)

PhoneColor (첫단어부터 대문자로)

->Class일때 사용,

 

->Package일땐 전부다 소문자로 작성하되 구분자 .()으로 둔다.

 

싱글쿼터 따옴표, 더블쿼터 쌍따옴표

 

--------------------------------

메소드

-> 메소드는 타언어에서는 함수라고 불림

-> 객체에서 기능부분을 담당

-> 중복되는코드 제거 가능

-> 메소드명도 기능의 명칭으로 작성한다.

-> 카멜표기법(userName) 2개이상 단어 오면 첫글자 대문자로 온다.

 

--------------------------------

- 메소드를 호출하는 방식

 

1. 값 호출(Call by Value)

-> 인수의 값을 호출한 함수에 전달

ex)t.testFunction(arr[0])

 

2. 참조 호출(Call by Reference)

-> 인수의 주소값을 호출한 함수에 전달

ex)t.testFunction2(arr)

--------------------------------

- 객체지향 프로그래밍

객체지향 - 객체를 중심으로 프로그래밍

ex)

필요한 객체들을 만든다.객체1, 객체2

프로그래밍을 할때 객체1이 필요하면 데려오고 또 데려오고 왔다갔다 한다.객체2도똑같다.

객체를 맘대로 가져와서 할수 있다.

 

절차지향 - 시간의 흐름을 중심으로 프로그래밍

ex)

 

- 객체지향의 장점

1. 코드의 재사용성이 높다.

-> 새로운 코드를 작성할때도 기존코드를 이용해서 쉽게 작성이가능하다.

2. 코드의 관리가 용이

-> 코드간의 관계를 이용해서 코드변경용이

3. 신뢰성이 높다.

-> 제어자, 메소드 등을 사용하여 데이터를 보호

-> 코드의 중복제거해서 오동작 방지가능

 

- 객체 - 속성이랑 기능의 집합

-> 속성 -> 변수 (속성을 변수라한다.)

-> 기능 -> 메소드 (기능을 메소드라 한다.)

-> 변수 + 메소드 -> 클래스 (그렇다고해서 클래서가 합친건아니다)

-> 클래스는 객체를 만드는 설계도

 

1. 추상화

->객체에서 필요한 속성과 기능을 추출하고 불필요한 것들을 제거하는 과정

Tv

-> 볼륨(음향), 채널, 크기, 해상도->이런걸 생각하는게 추상화과정이다.

-> 볼륨조절, 채널변경, 밝기조절, 전원, 번호입력, 외부입력

-> 볼륨,크기만 쓴다.->변수로만든다.

->전원, 볼륨조절만 한다.->메소드로만든다.

 

================================

- 접근제어지시자

1. public

-> 어디서든 허용

2. protected

-> 후손클래스, 같은패키지, 클래스내부 -> 후손(상속)

3. default -> 아무것도 명시하지 않고 만들때

-> 같은패키지, 클래스내부

4. private

-> 클래스내부

적용되는 범위 : 변수, 메소드

 

변수 -> 직접적인 접근을 제어 -> private 로 일반적으로 작성하게 되어있다.

 

================================

getter / setter

-> 변수의값을 읽어오거나 설정을 하기위한 메소드

-> private로 선언되어 외부에서 접근이 불가능한 변수의 값을 읽어오거나 설정을 하기위한 메소드

-> 메소드명만들때

 

-> 변수에 직접적인 접근을 막으면서(private) 변수값을 변경하거나 사용할때 사용되는 메소드

 

================================

캡슐화

-> 객체의 속성(변수)이나 기능(메소드)을 하나로 묶는것

-> 데이터의 유효값 유지를 위해서 데이터를 외부에서 함부로 변경하지 못하도록 직접적인 접근을 막는 것

-> private 을 통해 직접접근막고 -> 값수정을위해 getter/setter사용해서 데이터 수정

 

===============================

- 생성자와 소멸자

1. 생성자

-> 클래스를 바탕으로 객체가 생성될 때 자동으로 호출되는 메소드

-> 메소드명이 클래스명과 동일하다.

-> 오버로딩이 가능하다.

-> 반환값이 없다.

-> 생성자를 만들어주지않으면 -> 기본생성자를 자바에서 자동으로생성

 

==============================

- 변수

1. 지역변수

-> 해당지역(메소드)에서만 사용이 가능한 변수

-> 메소드내에서 선언, 메소드안에서만 사용이 가능

-> 메소드를 나가는 경우에 소멸

-> for(int i=0; i<5; i++) {

실행코드

}//int i도 지역변수고 for문안에서만 쓰는 지역변수

 

2. 전역변수(인스턴스 변수)

-> 클래스 영역에서 선언됨, 해당클래스안에서 사용이 가능

-> 객체를 생성하게 되는 경우에 생성

-> 그림으로 보자면 Tv t1 = new Tv();

이경우 메모리에 t1의 주소값을 저장하고 실제로따라가면 이녀석안에 Tv라는 모양의 객체가 생긴다. Tv t2 = new Tv(); 하고나면 t2라는 녀석의 주소2번을 저장하고 따라가면 Tv모양의 객체가 만들어진다. 이안에는 channel, volume 등등이 있다.

t1을 만들었을때 Tv클래스안에 있는 변수들을 전역변수라 한다.

인스턴스 변수란 말은 인스턴스화 해서 사용해야되기때문에 그때 메모리에 할당되며 자리가 생기므로 인스턴스변수라고도 한다.

 

3. 정적변수

-> 클래스영역에 선언

-> 클래스와 관계없이 사용이 가능합니다.

-> 인스턴스변수와 비슷한데 차이가 있다면 객체끼리 공유를 한다.

-> 정적변수는 static을 쓰는데 이녀석은 변수가 정적변수인데 t1을 백만원에 팔았다하면 t2는 이백만원에 팔았다. t2의가격을 200으로 올리면 t1의 가격도 자동으로 200으로올라간다는 것이다.

static 변수는 같이 변경이 된다는 것이다. -> static를 거의 안쓰긴 한다.

우리는 안쓴다.

 

4. 상수

-> final 키워드를 붙이면 상수화가 된다.

-> 더이상 값을 수정할 수 없다.

-> 변수명은 모두 대문자로 적는다.

-> ex( SIZE, 원주율 등) 안바뀔값들을 상수화처리한다.

 

===============================

- 단일상속, 다중상속이 있다.

->단일상속 1개의 부모클래스만 가진다.

->다중상속은 여러개를 상속받는것(여러개의 부모클래스)

 

->자바에서는 다중상속을 지원하지 않는다.

->C++ 다중상속 된다.

다중상속의 장점

-> 복합적인 기능을 가진 클래스도 쉽게 작성가능

-> Tv를 예로 들어보면 video기능을 가진게 있었는데 그경우엔 video라는 객체와 tv라는걸합쳐서 만들면된다.

 

다중상속의 단점

-> Tv,Video 둘다 전원이 있을텐데 의미를 알수있게 짓는데 둘다 power이라는 변수가 있다면 구분할 방법이 없다.

-> 둘중하나를 변경해야한다.

-> 이미이걸 쓰고있는 클래스에 일괄적용해야한다.

이것때문에 다중상속 지원하지 않는다.

 

- 상속의 특징

-> 부모클래스의 생성자는 상속되지 않음

1) 자식클래스의 객체를 생성하는 경우 부모클래스 생성자가 먼저 실행된다.

2) 자식클래스의 생성자에서 부모클래스의 생성자를 호출하고싶은경우 자식클래스에서 super() 키워드 사용한다.

-> private를 썼다.->자기클래스 아니면 안된다. -> super을 하고나면 가능해진다.

-> private사용하는경우 상속은 가능하지만 직접접근 불가

-> 값의 초기화할 경우는 super()

-> 값을 변경할려면 getter/setter 사용하여 접근

3) 모든클래스는 Object 클래스의 후손

 

String값 비교할때 equals(), toString 이런걸 썼는데 아무명시하지않는경우 object 클래스의 메소드를 상속을 해오는 것이다.

 

================================

- 오버라이딩

-> 자식클래스가 상속받은 부모메소드를 재작성하는것

-> 부모가 제공하는 기능을 후손이 일부 고쳐 쓰겠다.

@Override -> 어노테이션 -> JVM에 신호를 주는데 명시하지 않아도상관은 없다.

->명시하면 오류를 더 빠르게 찾아낼수 있다.

->오버라이딩할경우 double이면 double로와야되고 그 반환값 형태는 같아야한다.

 

- 오버로딩

메소드의 매개변수로 한 것이다.

 

================================

추상메소드

-> 미완성된 메소드

public abstract void test();

//미완성이기 때문에 여기까지만 작성한다.

 

상속받은녀석이 이걸 반드시 완성해서 써야한다.

추상메소드가 들어있는걸 보고 추상클래스라고 한다.

 

추상클래스

-> 일반적으로 추상메소드를 가지고 있는 클래스

-> abstract class 클래스명 -> 객체화를 막기위해서

-> 반드시 상속하게 만들기 위해->이런용도로도 쓴다.

 

public abstract class 클래스명{

추상메소드

}

 

클래스는 객체의 설계도 -> 추상클래스는 객체화가 안됨

 

추상클래스는 설계도가 완성이 안되어있다.

그러므로 객체화가 불가능하다.

 

==============================

- 인터페이스

-> 추상화정도가 더 높은 추상클래스

-> 미완성도가 높은 클래스

-> 추상메소드로만 이루어져있는 클래스

-> 상수형변수만 가능

-> 협업할때 사용한다.

 

==============================

- 다형성

-> 한가지가 여러가지 형태를 가지고 있는 성질

-> 상속을 이용한 기술

-> 자식객체를 부모클래스타입의 변수로 다룰수있는 기술(상속)

-> 상속이되야 가능하다.

==============================

동적바인딩

부모타입의 객체가 있더라도 오버라이드된게 먼저다.

===============================

제너릭 - 변수타입을 지정하지 않고 임의로 값을 갖는것이다.

스레드 - 같이 어떤 소스를 수정할때 서로 부딪치지않기위해 쓰는 것이다.

================================

Call by Value

 

Call by Reference

 

변수 -> 공간

 

stack영역과 heap영역이 있는데

int a라고 선언을 하면 공간을 stack에 확보한다.

기본형 변수일때 이렇게 한다.(char,int,double )

참조형 변수일땐 arr이라는 공간이 생성되고 주소를 저장하는데 그주소를 따라가면

heap영역에 그값들이 저장되어있는 것이다.

 

- 지역변수, 전역변수, 정적변수

1. 지역변수 : 해당지역에서만 사용이 가능한 변수

-> 메소드내에서 선언되고, 메소드 종료시 소멸

for(int i=0; i<5; i++){

i--;

}//무한루프 돌것이다.

 

2. 전역변수(인스턴수 변수) : 해당 클래스 안에서 사용가능한 변수(객체를 만드는 경우 해당 객체에서만 사용이 가능)

 

 

3. 정적변수

-> 클래스안에서 정의

-> private static

 

4. 상수화(final)

-> 더이상 변수의 값 변경이 불가능함

-> 최초 선언시 반드시 값을 입력

-> 명명규칙은 모두 대문자(ex.SIZE, PI)

 

- 객체

-> 속성과 기능의 집합(속성 -> 변수, 기능 -> 메소드)

변수 + 메소드 -> 클래스를작성했다.

객체 -> 클래스를보고 메모리에 해당 형태로 생성된 데이터

클래스 -> 객체의 설계도

Tv객체를 만들 예정

1. Tv 어떤 속성이있고, 어떤 기능이있는지 생각하고 정리

- 추상화

Tv

#속성 : 파워, 채널, 볼륨

#기능 : 파워on/off, 볼륨 업/다운

추상화 후에 클래스를 작성하면 객체설계도가 완성

 

객체는

Tv t = new Tv();//이런식으로 만들었다.

이때 객체가 만들어진다.

 

변수, 메소드

->캡슐화 ->하나로묶는것도 하지만 ->데이터의 보호의 목적까지 포함

-> private -> getter/setter

 

getter

->해당 변수의 값을 읽어오기 위한 메소드

setter

->해당 변수의 값을 대입하기 위한 메소드

 

'IT일반과목 > java' 카테고리의 다른 글

API String, StringBuffer StringBuilder  (0) 2018.07.30
문제풀기  (0) 2018.07.27
예외처리2 try-catch  (0) 2018.07.26
예외처리  (0) 2018.07.26
포인트관리프로그램(다형성)  (0) 2018.07.26