리뷰
1. 객체 생성 ( new 이용 )
Employee e = new Employee();
멤버접근
e.멤버
2. public static void main( String [] args ){}
==> 객체생성없이 실행가능한 특별한 메소드.
3. 생성자 ( Constructor )
– 변수 : 데이터 저장
– 메소드 : 데이터 수정, 얻기
==> 객체생성하고 참조변수.메소드 호출가능.
– 생성자 : 데이터 초기화
==> new 클래스명([인자]);
==> 모든 클래스에는 자동으로 기본생성자(default 생성자)
가 생성된다. ( public 클래스명(){} )
==> 개발자가 명시적으로 생성자를 만들면 기본생성자는
자동 생성 안된다.
4. 오버로딩 생성자, 오버로딩 메소드
: 같은 이름의 생성자, 메소드가 여러개 지정가능하다.
단, 인자 리스트는 반드시 달라야 된다.
( 인자 갯수, 순서 , 데이터형 )
: 재사용성을 증가.
5. 연산자
– 산술연산자
– 비교연산자 (논리값)
– 대입연산자
– 논리연산자 (논리값)
– 3항연산자
– instanceof (논리값)
==> 논리값으로 결과가 나오는 연산자는 제어문과 같이
사용된다.
6. 제어문
– 단일if문, if~else문, 다중 if문, switch
3일차.
1. 반복문
: 한번 실행한 문장을 반복해서 실행가능한 문.
: 중첩이 가능하다.
:종류
가. for
: 배열과 같이 주로 사용한다.
for(초기값 ; 조건식 ; 증감연산자){
문장;
}
순서는 다음과 같다.
초기값 -> 조건식 -> 문장실행 -> 증감->조건식->문장->…
예> for( int i = 0 ; i < 10 ; i++ ){
System.out.println(“Hello”);
}
for( int i = 0 ; i < 10 && k==3 ; i++ ){
for( int k = 0 ; k < 5 ; k++ ){
System.out.println(“Hello”);
}//end for
}//end for
실습>
*
**
***
****
*****
무한루프
==> for( ; ; ){
}
나. while
문법:
while(조건식){
문장;
}
예>
int i = 0;
while( i < 10 ){
문장;
i++;
}
무한루프
while(true){
}
다. do~while
==> 최소한 한번은 문장을 실행할 수 있다.
문법
do{
문장
}while(조건식);
예>
int y = 0;
do{
System.out.println(“hello”);
y++;
}while( y < 10 );
: 공통점
==> 반복횟수가 지정된다. ( 10번 )
==> 시작값(초기값)이 필요 ( int i = 10;
==> 증가 연산자 필요 ( i++ )
==> 조건 검사 ( i < 10 )
2. 패키지 ( package )
용도: 윈도우 폴더 역할.
많은 클래스들을 관련된 것끼리 묶어주는 역할을 한다.
특징 : 패키지명은 유일한 값으로 지정한다.
( 도메인 형식으로 )
: 패키지가 틀리면 클래스를 사용할 수 없다.
문법: 클래스를 정의전에 다음과 같이 package을 명시한다.
package 패키지명;
package 패키지명.패키지명2;
예> package com.test;
public class 클래스명{}
==> javac 로 명시적으로 컴파일은 다음과 같다.
– 일반적인 컴파일
javac Student.java
– 일반적인 실행
java Student
– 패키지 컴파일
javac -d 클래스위치경로 Student.java
– 패키지 실행
java com.test.Student
3. import
용도: 패키지가 달라도 클래스를 접근가능하게 해주는 방법.
특징: 여러번 사용 가능.
문법
import 패키지명.패키지명1.클래스명;
예>
import com.test.Student;
import com.xx.AAAA;
public class TestStudent{}
==> 패키지가 다르면 반드시 import 해야 된다.
==> API ( 시스템이 만들어준 클래스파일들 :rt.jar ) 가
패키지로 제공된다.
==> API 중에서 java.lang 패키지는 자동 import 된다.
따라서 java.lang 이외의 패키지에 저장된 클래스를 사용할때에는 반드시 import 해야 된다.
==> ctrl + shitf + o (영문자)
4. 문자열 생성하는 방법
: 리터럴 ( “” 표현 )
가. String 클래스
==> 한번 생성된 문자열을 변경안됨. 가공하면 새로운 문자열이 생성된다.
– new 이용
: String yyy = new String(“Hello”);
: 동일한 문자열도 매번 생성
– 리터럴이용
: String xxx = “Hello”;
: 동일한 문자열은 재사용.
==> 문자열은 문자의 배열이다.
“Hello” –> H e l l o
0 1 2 3 4 ==> 인덱스(첨자)
나. StringBuffer 클래스
– new 이용
– 한번 생성된 문자열 수정이 가능
– 문자열의 수정이 많은 경우에 사용한다.
– append 메소드를 주로 사용한다.
다. + ( 연결연산자)
==> 문자열과 + 다른데이터형 : 문자열로 변경
예> int num = 123; // num 정수를 문자열로 변경
String xxx = num+””;
// “”:빈문자열(empty string)-권장안함
라. toString 메소드 이용.
==> 문자열로 만드는 메소드
==> 기본형데이터를 문자열로 변경시 주로 사용
( Wrapper 클래스이용)
5. Wrapper 클래스 ( 랩퍼 클래스 )
==> 기본형 데이터에 해당되는 8개의 클래스를 의미.
==> 기본형 데이터 작업시 효율적으로 작업하자.
( Wrapper 클래스의 메소드, 변수를 이용하자 )
기본형 참조형(클래스)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
예> “123” ——-> 123
123 ———–> “123”
String x = “123”;
int y = Integer.parsetInt(x);
int y2 = y + 1; //124
“123.4F” ——–> 123.4F
String x2 = “123.4F”;
float z = Float.parseFloat( x2 );
==> 변수, 메소드 static 지정된것은 클래스명.멤버 ,
객체생성불필요.
6. 데이터 형변환
-정의: 데이터형이 변경됨을 의미한다.
– 반드시 같은 계열끼리만 변경가능하다.
* 데이터형 ( 기본형:수치형끼리 , 참조형:상속관계 )
종류
가. 자동 형변환 ( promotion )
예> int x = 3;
long y = x; ( 8byte = 4byte )
( int 형 x가 long 형으로 자동형변환)
float f = 2.3F;
double d = f; ( float 형 f가 double 형으로 자동형변환)
int x = ‘A’ + 1; // 66
float xx = 2.13F;
int xx2 = 10;
xx + xx2 ==> 실수값
나. 강제 형변환 ( type casting )
: 형변환 연산자( 캐스트연산자:cast 연산자)를 사용한다.
: (데이터형)
long x = 3;
int y = x; ( 4byte = 8byte )
int z = (int)x;
char c = (char)66; //B
7. 지정자 ( modifier )
용도: 클래스, 변수, 메소드 정의시 특별한 의미를 부여하는
키워드
종류
가. 접근 지정자 ( access modifier ) 4가지
==> 클래스,변수,메소드등의 접근을 제한하는 방법
==> 패키지 고려해야 된다.
public
: 모든 곳에 접근가능
( 같은패키지, 다른 패키지 상관없이 )
protected
: 같은 패키지내에의 클래스간 접근 가능.
+ 다른패키지 접근 가능(단, 상속관계)
(friendly)
: 같은 패키지내에의 클래스간 접근 가능.
( 다른 패키지 접근 불가)
private
: 같은 클래스에서만 접근 가능하다.
* 클래스 : public(권장) , (friendly)
메소드 : public (권장)
변수(인스턴스변수만 지정가능): 로컬변수 사용못함.
: private( 권장 )==> 직접접근못함(데이터무결성)
==> 은닉화( encapsulation )
나. 일반 지정자( standard modifier )
: static
: final
: abstract
==> 지정자끼리 조합해서 사용한다.
8. final 키워드
의미: 금지 (불가)
사용:
클래스
: public final class 클래스명{}
: 상속불가
변수:
: final int num =3;
…
num = 10; // 에러 발생
: 값 변경 불가 ( ==> 상수 )
* 상수( constant )
: 값 변경
: 이름은 대문자 지정한다.
: 문법
일반적으로 public static final 지정자를 사용한다.
public static final int NUM = 3;
클래스명.NUM 으로 사용한다.
메소드
: public final void a(){}
: 오버라이딩 메소드 불가
*오버라이딩 메소드
==> 부모의 메소드를 상속받아서 나름대로
수정한 메소드.
9. static 키워드
특징: 객체생성과 무관
( 객체생성전에 자동생성된다. == > 객체생성이 필요없다.)
: 한번만 생성된다.
: 클래스이름.멤버 로 접근한다.
: 저장메모리
– 스택 ( 로컬변수) ==> 메소드호출할때마다 생성
– 힙 ( 인스턴스 변수) ==> new 할때마다 생성
new 객체생성======>
– 클래스area ( static 변수, static 메소드)
(static area) ==> 단 한번 생성
=> 프로그램실행 ~ 프로그램 종료
( main 시작 ~ main 종료 )
*변수
: static 변수 , class 변수
: 단 한번 생성
: 공유 목적으로 사용한다. ( 예 > 값 누적 )
프로그램종료전까지 데이터를 유지해야 되는 경우에 주로
사용한다.
* 메소드
: static 메소드
: 객체생성없이 사용목적.
예> Integer.parseInt() , Integer.toString()
* 클래스
: static 클래스
: 중첩 클래스에서 사용한다.
class A{ // Outer 클래스
static class B{ // Inner, nested , 중첩클래스
}
}//end A
예> 객체 생성 횟수 ?
* static 블럭
예> static{
System.out.println(“hello”);
}
10. 싱글톤 디자인 패턴 ( singleton design pattern ) ?
*디자인 패턴 ( design pattern ) ?
==> 프로그램 개발의 방법중에서 검증되고 효율적인
코드를 일관된 방법으로 사용하는 것.
정의: 인스턴스를 하나만 생성할 수 있는 패턴.
==> 현실세계의 객체가 하나만 있으니까.
구현:
==> new 를 한번만 해야 된다.
11. 상속
생성자·오버로딩을 확인하는 예제
앞부분은 링크된 학습 자료를 참고한 정리입니다. 아래 보충 예제에서는 생성자가 초기 상태를 정하고, 서로 다른 매개변수 목록이 오버로딩을 구분한다는 점을 확인합니다. 기본 생성자는 생성자를 하나도 선언하지 않았을 때 제공되며 항상 public이라는 뜻은 아닙니다.
class Counter {
private int value;
Counter() { this(0); }
Counter(int initial) { value = initial; }
void add() { add(1); }
void add(int amount) { value += amount; }
int getValue() { return value; }
}
반복문 안에서 add()를 세 번 실행한 결과와 add(3)을 한 번 실행한 결과를 비교해 보세요. 반환형만 바꾸어 같은 매개변수의 메서드를 선언하는 것은 오버로딩이 아닙니다. 기존 메모의 예제는 스마트 따옴표나 변수 범위 오류가 섞여 있으므로, 실제 실행 시 일반 따옴표와 선언 범위를 확인합니다. Java 클래스·메서드·생성자 문서.
클래스와 변수의 기초 복습은 자바(java) 기초 2편.에서 이어집니다.