본문 바로가기

JAVA

자바 기초 문법 1장 (수정중)

 

JDK EE

이클립스 JDK 버전 확인후 같은걸로  java -versoin


 

JAVA - 초반 커피이름으로 지음

특징

객체지향(oop),  가비지컬렉션, 플랫폼 독립성, 멀티쓰레드

 

- 객체지향언어 특징

코드 재사용성 (상속, 구현)

캡슐화(접근제어자 + 변수)

싱글턴패턴(접근제어자 + 생성자, static 메서드를 통해서 만들어둔 객체의 주소값을 돌려줌)

다형성

 


- 메모리에 로딩되는 순서

1. calss 정보 로딩

2. staiic 멤버  - static 변수, static method, static{} (static 블럭) 

3. main() 실행

 - 객체생성(heap 영역) -> 인스턴스멤버(메서드, 변수)로 로딩

 - 매서드 호출(call stack) -> method 안에 있는 지역변수 로딩


- class 이름 X

같은 이름 , 숫자시작 x
공백x('_' 언더바사용할것)
특수기호 x('_', '$'언더바 및 달러표시 가능)
키워드 x(만들어져있는 식별자) 대문자로 바꾸면 사용가능


 

- 기본형변수 & 참조변수 특징

 

기본형 변수
변수 : 하나의 값을 저장하는 공간.
논리형 boolean   /  false
문자형 char      /   unll
정수형 byte, short, int, long  / 0,  0L
실수형 float, double   / 0.0f , 0.0d

 

참조변수

생성되는 모든 클래스가 데이터 타입이 된다.

데이터 타입에 대한 생성된 주소를 가진다.

 

this : 지금 생성하고 있는 객체의 주소값을 저장

super : 조상의 멤버


변수 정의

- 멤버변수 종류와 특징 사용방법에 대해 서술. 

 

기본형 매개변수 - 변수의 값을 읽기만 가능

참조형 매개변수 - 변수의 값을 읽고 변경가능


인스턴스변수 (instance variable)

- 각 인스턴스의 개별적인 저장공간. 인스턴스마다 다른 값 저장가능

- 인스턴스 생성 후 , (참조변수.인스턴스변수명) 으로 접근
- 인스턴스를 생성할 떄 생성되고, 참조변수가 없을 떄 가비지컬렉터에  의해 자동제거됨

 

클래스변수(class variable)

-같은 클래스의 모든 인스턴스들이 공유하는 변수

- 인스턴스 생성없이 (클래스이름.클래스변수명)으로 접근

- 클래스가 로딩될 떄 생성되고 프로그램이 종료될 떄 소멸

 

지역변수(local variable)

일반변수

-메서드 내에 선언되며, 메서드의 종료와 함꼐 소멸

- 조건문, 반복문의 블러{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸

- 지역변수는 사용전에 초기화를 해주어야한다

 

메개변수

매서드 내부에 입력값을 받는 선언된 변수

(입력값에서 선언만 되어있는) 호출할때 생성


초기화 블럭 (initialization block)

명시적 방법

타입 변수 = 초기값 : int a= 10;

선언과 생성을 동시에 한다.

 

- 인스턴스 초기화 블럭 : {}

생성자에서 공통적으로 수행되는 작업에 사용, 인스턴스가 생성될 떄 마다(생성자보다 먼저) 시행

 

- 클래스 초기화 블럭 : static{}

클래스 변수의 복잡한 초기화에 사용, 클래스가 로딩될때 실행


※인스턴스변수와 지역변수를 구별하기 위해 참조변수 this 사용

참조변수

this() :같은 클래스의 다른 생성자 호출

인스턴스 자신을 가리키는 참조변수. 인스턴스의 주소가 저장됨

모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재

 

 super : 조상 클래스의 생성자 호출

this와 같음. 조상의 멤버와 자신의 멤버를 구별하는데 사용

(Object 클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자(같은 클래스의 다른 생성자 또는 조상의 생성자) 호출, 아니면 자동으로 super();생성자의 첫 줄에 삽입됨. 

 

서로 첫번째 줄에 사용해야 하기떄문에 둘이 함께 쓸수 없음


 

- 메서드 정의

 
작업을 수행하기 위한 명령문의 집합
어떤 값을 입력받아서 처리하고 그 결과를 돌려준다.
  (입력받는 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있다.)

 


메서드 종류 와 특징 호출 방법 서술

클래스 메서드
- 객체생성없이 ‘클래스이름.메서드이름()’으로 호출
- 인스턴스변수나 인스턴스메서드와 관련없는 작업을 하는 메서드
- 메서드 내에서 인스턴스변수 사용불가
- 메서드 내에서 인스턴스변수를 사용하지 않는다면 static을 붙이는 것을 고려한다.


인스턴스 메서드
- 인스턴스 생성 후, ‘참조변수.메서드이름()’으로 호출

- 인스턴스변수나 인스턴스메서드와 관련된 작업을 하는 메서드
- 메서드 내에서 인스턴스변수 사용가능

 

추상 메서드(abstract)

메서드 : 선언부 작성, 구현부는 자성하지 않은 추상메서드

상속받는 자손 클래스에 의해 구현 된다

 

파이널 메서드

오버라이딩 X( 변경 x)


생성자

- 인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 메서드

- 인스턴스 변수의 초기화 또는 인스턴스 생성시 수행할 작업에 사용

- 몇가지 조건을 제외하고는 메서드와 같다

- 모든클래스에는 반드시 하나 이상의 생성자가 있어야 한다.

* 인스턴스 초기화 - 인스턴스 변수에 적절한 값을 저장하는 것.

1. 리턴타입 x  (voidX)

 2. class 이름과 같아야 함

 

기본생성자(default constructor)

- 매개변수가 없는 생성자

- 클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가

ex) 클래스 이름 () {} // 내용 x


제어자

- 클래스, 변수, 메서드 선언부에 사용 부가적인 의미 부여

- 제어자는 크게 접근 제어자, 그외 제어자

- 하나의 대상에 여러 개의 제어자를 조합 사용, 접근제어자는 하나만사용

 

static 사용가능한곳 : 멤버변수, 메서드, 초기화 블러

 

final      "             : 클래스, 메서드 = 변경 x

                            멤버변수, 지역변수 = 상수

 

-final 인스턴스 변수의 경우 생성자에서 초기화 할수 있다.

 

abstract(추상) 클래스: 클래스 내에 추상메서드 선언

                    메서드 : 선언부 작성, 구현부는 자성하지 않은 추상메서드

                                자손클래스에 의해 구현(오버라이딩)

 

접근 제어자(access modifier)

- 멤버 또는 클래스에 사용, 외부로부터 접근 제어(데이터 보호, 불필요한내용 뺴고 내부적으로만 사용되는 부분을 감추기 위해) 캡슐화

 

 private : 같은 클래스 내에서만 접근 가능

default : 같은 패키지 내에서만 접근

protected : 같은 패키지, 다른패키지 자손클래스 접근가능

public : 접근 제어 없음

 

class 앞에 public , defaul만 사용 가능


오버로딩

(overloading) - 기존에 없는 새로운 메서드를 정의하는 것(new)

조건

- 매서드의 이름이 같아야함

- 매개변수의 개수 또는 타입이 달라야함.

- 매개변수는 같고 리턴타입이 다른 경우는 오버로딩X

 

오버라이딩

(overriding)- 상속받은 메서드의 구현부 내용을 변경하는 것 (change, modify)

조건

- 선언부가 같아야 함(이름, 매개변수, 리턴타입)

- 접근제어자를 좁은 범위로 변경x

- 조상클래스의 메서드보다 많은 수의 예외를 선언X


상속(inheritance)

기존의 클래스를 재사용해서 새로운 클래스 작성

두 클래스를 super과 sub으로 관계를 맺음

sub은 super의 모든 멤버를 상속

ex) class sub클래스 extends super클래스

 

Object - 모든클래스의 최고 super


oop(Object Oriented Programming)

객체지향프로그램 (다형성polymorphism)

- 여러가지 형태를 가질수 있는것.

한가지 타입의 참조변수로 여러 타입의 객체를 참조할 수 있다는 것이다.(단 상속관계일때 )

 

다형성(polymorphism)

- 하나의 참조변수로 여러객체를 참조가능

- 하나의 참조변수로 여러 타입의 객체를 참조할 수있는것

(조상타입의 참조변수로 자손타입의 객체를 다룰 수있는것)

조상타입 참조변수 -> 자손타입 인스턴스 참조 O

자손타입 참조변수-> 조상타입 인스턴스 참조 X

 


interface

- class와 동급
- 상수와 추상메서드만 가질 수 있다.
- 생성자 없음 -> 객체생성X
- 일반 class에서 *구현 해서 씀
*구현 : implements -> extends(상속) + overriding
- 다형성을 이용해 객체 생성.
- 최고 조상이 없다.
-(interface)다중상속이 가능하다.

 



형변환
기본 - > 기본 (0)
기본 - > 참조 (X)
참조 - > 참조(X) , 단상속관계일때만 허용
super -> (명시) sub
sub -> super
-> interface도 형변환 가능

 

배열 : 같은 타입의 여러개의 값을 하나로 묶어서 저장하는 공간

ex) ch new char[4];


 

너무 길어서 2장으로 넘김.....

 

( 수정중)


 


객체지향 

 ※ 코드의 재사용성

 

클래스  - 객체를 정의 

용도 -  객체를 생성 하는데 사용

 

객체 - 실제로 존재 (주소로 찾아감)

용도 - 속성과 기능에따라 다름

 

ex) 건물 설계도(클래스)  -> 건물 (Object) 객체

 

 

절차지향 (처음부터 끝까지 순서대로 읽는것)

 

> 객체지향 (필요한 코드만 을(를) 불러서 사용)

 

> 객체 = 인스턴스

 

> 데이터 저장공간 - 변수, 배열, 컬렉션 (객체 저장)

 

인터페이스 - List(순서유지, 중복 O)

set (순서 x , 중복X)

map - >key 순서x, 중복x

value > key를이용 get

 


static 변수 : class 변수  -> 선언 방법 : class명, 변수명

 class 변수 인스턴스 변수 : 멤버 변수  -> 객체 생성 후 , 참조변수,변수명

지역변수 - method 내에 선언

 

 


리턴문과 반환값이 타입이 같아야 가능

 

지역변수는끝나고 사라짐


Constructor

object 생성될때 자동적으로 단 한번 호출