SlideShare ist ein Scribd-Unternehmen logo
1 von 18
객체 지향 언어
사용 이유
컴퓨터가 현실세계와 최대한 비슷하게 만들어지기 위해
(속성(필드) + 기능(메소드))
특성
1. 캡슐화 : 외부객체가 접근을 못하게 함.(접근 제한자)
중요한 필드와 메소드를 보호
2. 상속(상위객체 + 하위객체) : 중복 코드를 줄여서 빨리 설계.
3. 다형성 : 같은 타입이지만 실행 결과가 다양한 객체를 이용.
e.g. 컴퓨터1, 컴퓨터2
객체와 클래스
설계도(클래스) -> 객체(인스턴스)
객체 생성
new 연산자 : 힙영역에 객체 생성 후 객체의 주소를 리턴
(주소를 변수로 받아와서 사용)
클래스 선언
public class Student{
}
e.g. 변수 = new 클래스();
클래스 구성(필드, 생성자, 메소드)
필드
: 데이터 저장, 변수와 비슷하지만 변수라고 부르지 않는다.
: 자동 디폴트(0) 초기화
: 어디서든 선언 가능
cf) byte, char
※ 필드 vs 변수
필드는 생성자와 메소드 전체에서 사용되고 객체가 소멸되지 않으
면 소멸안됨.
변수는 생성자와 메소드 안에서만 사용되고 종료되면 소멸.
※필드 초기화
(1) 필드 선언 시
(2) 생성자 선언 시
※필드 사용
e.g. myCar.company;
생성자
: 객체 생성시 초기화 담당.
: 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비.
: 클래스 이름으로 되어있고 리턴 타입이 없다.
생성자 선언
public class Car{
String nation = "대한민국";//필드 초기화
String color;
Car(String c, int cc){
color = c; //생성자안에서 필드 초기화
//this.color = color;
}
}
생성자 호출해서 객체 생성
public class CarExample{
public static void main(String[] args){
Car myCar = new Car("Black", 3000);
}
}
생성자 오버로딩
public class Car{
Car() { ... }
Car(String model) { ... }
Car(String model, String color) { ... }
}
Car car1 = new Car();
Car car2 = new Car("에쿠스");
Car car3 = new Car("에쿠스", "검정색");
: 생성자 다양화.
클래스 내에 같은 이름의 생성자를 여러 개 선언하는
것.
다른 생성자 호출(this())
public class Car{
String model;
Car(String model) { this(model, color, 250) }
Car(String model, String color, int maxSpeed) {
this.model = model;
}
}
메소드
: 필드를 읽고 수정, 다른 객체 생성, 객체 간 데이터 전달의 수단.
※함수 vs 메소드
함수 :
반환타입 함수이름 ( 파라미터 리스트 )
{
내용
return 값;
}
메소드 : 클래스 안에서 사용되는 함수.(멤버함수)
데이터타입에 의존적인 함수.
(자바에서는 main 함수가 아니라 main 메소드)
메소드 선언
리턴타입 메소드이름([매개변수선언, ...]){
//실행블록
}
※ 메소드이름
: 숫자로 시작, 특수 문자 X
(관례적으로 소문자로 작성, 혼합된 이름이면 뒤의 단어의 첫글자는 대문
자)
※ 매개 변수 선언
: 필요한 데이터를 외부로부터 받기 위해 사용.
cf) 매개 변수의 수를 모를 경우 : 배열 타입으로 선언 또는 ...을 사용
(메소드 호출 시 배열로 넣을 필요가 없이 리스트로 나열)
※ 리턴값
: 리턴값이 없는 메소드 return ;
int sum1(int[] values) {...}
int sum2(int ... values) {...}
int result1 = sum1(new int[] {1, 2, 3, 4, 5});
int result2 = sum2(1, 2, 3, 4, 5);
메소드 호출
: 클래스 내/외부의 호출로 나뉨.
void 외부메소드(){
Car car = new Car(); //객체생성
car.run();
}
void 내부메소드(){
run();
}
void run(){ ... }
메소드 오버로딩
int plus(int x, int y){
int result = x + y;
return result;
}
double plus(double x, double y){
double result = x + y;
return result;
}
인스턴스 멤버와 this
: 객체(인스턴스)를 생성해서 사용하는 필드, 메소드를 인스턴스 멤버라고 함.
public class Car{
String model;
Car(String model){
this.model = model;
}
void setModel(String model){
this.model = model;
}
}
※this
Car myCar = new Car();
myCar.gas = 10;
myCar.setSpeed(60);
Car myCar = new Car();
myCar.setModel("벤츠");
Car myCar = new Car("벤츠");
정적 멤버와 Static
정적(static) 멤버(클래스 멤버)
: 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소
드.
※인스턴스 필드 vs 정적 필드
: 객체마다 다른 값을 가지는 데이터면 인스턴스 필드.
공용적인 데이터면 정적 필드.
public class Calculator {
String color;
static double pi = 3.14159;
}
※인스턴스 메소드 vs 정적 메소드
: 인스턴스 필드를 이용한다면 인스턴스 메소드.
인스턴스 필드를 이용하지 않는다면 정적 메소드.
public class Calculator {
String color;
void setColor(String color) {this.color = color;}
static int plus(int x, int y) { return x+y;}
}
정적 필드 초기화
: (1) 선언 시 (2) 정적 블록(복잡한 초기화 작업)
public class Television {
static String model = "LCD";
static String info;
static {
info = company + "-" + model;
}
}
※주의사항
: 정적 메소드, 정적 블록 내부에 인스턴스 필드나 메소드를 사용할수없다.
(정적 메소드나 정적 블록이 객체가 없어도 실행되기 때문에)
=> this도 사용 불가
해결=> 객체를 생성한 후 사용.(main도 마찬가지)
int field1;
static void Method() {
field1 = 10; //Error
}
static void Method(){
ClassName obj = new ClassName();
obj.field1 = 10;
}
Singleton (싱글톤)
: 단 하나의 객체만 만들어야 할때 외부에서 new 연산자로 생성자를
호출 못하게 막는 방법.
pulic class 클래스 {
//정적 필드
private static 클래스 singleton = new 클래스();
//생성자
private 클래스() {}
//정적 메소드
static 클래스 getInstance() {
return singleton;
}
}
클래스 변수1 = 클래스.getInstance();
클래스 변수2 = 클래스.getInstance();
클래스 변수1 = new 클래스();
클래스 변수2 = new 클래스(); //컴파일에러
Final 필드
: 프로그램 실행 도중에 수정할 수 없다.
=> 초기화 : 1) 필드 선언시 2) 생성자 선언
시
=> e.g. 주민등록번호
※상수(static final)
e.q. 원주율, 지구의 둘레.
final 타입 필드;
static final 타입 필드;
패키지
: 클래스를 체계적으로 관리하기 위해 폴더기능.
: 상위 패키지, 하위 패키지.
패키지 선언
package 상위패키지.하위패키지.
※다른 패키지에 속하는 클래스를 사용하려면
(1) 패키지와 클래스 기술
(2) import
(1) com.hankook.Tire tire = new com.hankook.Tire();
(2) import com.hankook.Tire; //import com.hankook.*;
접근 제한자
: 데이터 보호, 객체 생성을 막기 위해서, 특정 메소드를 호출 못하게 하기 위해서
Getter/Setter Method
: 객체의 무결성이 깨지는 것을 막기 위해서 객체 지향 프로그래밍에서는
메소드를 통해서 데이터를 변경하는 방법을 선호.
e.g. 자동차의 속도는 음수가 될 수 없는데, 외부에서 음수로 변경하면
객체의 무결성이 깨진다.
private 타입 fieldName;
//Getter
public 리턴타입 getFieldName(){
return fieldName;
}
//Setter
public void setFieldName(타입 fieldName) {
this.fieldName = fieldName;
}
어노테이션(Annotation)
: 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할것
인지를 알려주는 정보이다.
e.g. @AnnotationName
※용도
(1) 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공.
(2) 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동르로 생성할 수 있
도록 정보를 제공.
(3) 실행시 (런타임 시) 특정 기능을 실행하도록 정보를 제공.

Weitere ähnliche Inhalte

Was ist angesagt?

파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기Yong Joon Moon
 
파이썬 Xml 이해하기
파이썬 Xml 이해하기파이썬 Xml 이해하기
파이썬 Xml 이해하기Yong Joon Moon
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리ETRIBE_STG
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기 Yong Joon Moon
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초진수 정
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130Yong Joon Moon
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitiveNAVER D2
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 Yong Joon Moon
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈Yong Joon Moon
 
파이썬 Special method 이해하기
파이썬 Special method 이해하기파이썬 Special method 이해하기
파이썬 Special method 이해하기Yong Joon Moon
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229Yong Joon Moon
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기 Yong Joon Moon
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oopYoung-Beom Rhee
 

Was ist angesagt? (19)

파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기
 
파이썬 Xml 이해하기
파이썬 Xml 이해하기파이썬 Xml 이해하기
파이썬 Xml 이해하기
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
 
파이썬 심화
파이썬 심화파이썬 심화
파이썬 심화
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
9 swift 클로저1
9 swift 클로저19 swift 클로저1
9 swift 클로저1
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기
 
Java class
Java classJava class
Java class
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
파이썬 Special method 이해하기
파이썬 Special method 이해하기파이썬 Special method 이해하기
파이썬 Special method 이해하기
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop
 
Java lambda
Java lambdaJava lambda
Java lambda
 

Ähnlich wie 이것이 자바다 Chap. 6 클래스(CLASS)(KOR)

Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ patternjinho park
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 patternjinho park
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11hungrok
 
5장 객체와클래스
5장 객체와클래스5장 객체와클래스
5장 객체와클래스SeoYeong
 
Design patterns
Design patternsDesign patterns
Design patternsdf
 
Gpg gems1 1.3
Gpg gems1 1.3Gpg gems1 1.3
Gpg gems1 1.3david nc
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++KWANGIL KIM
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩해강
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부quxn6
 
자바스터디 2
자바스터디 2자바스터디 2
자바스터디 2jangpd007
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2문익 장
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장Software in Life
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)유석 남
 
Java, android 스터티2
Java, android 스터티2Java, android 스터티2
Java, android 스터티2Heejun Kim
 

Ähnlich wie 이것이 자바다 Chap. 6 클래스(CLASS)(KOR) (20)

Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 pattern
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
 
5장 객체와클래스
5장 객체와클래스5장 객체와클래스
5장 객체와클래스
 
Java_05 class
Java_05 classJava_05 class
Java_05 class
 
강의자료4
강의자료4강의자료4
강의자료4
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Storm 훑어보기
Storm 훑어보기Storm 훑어보기
Storm 훑어보기
 
STL study (skyLab)
STL study (skyLab)STL study (skyLab)
STL study (skyLab)
 
Java(3/4)
Java(3/4)Java(3/4)
Java(3/4)
 
Gpg gems1 1.3
Gpg gems1 1.3Gpg gems1 1.3
Gpg gems1 1.3
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 
자바스터디 2
자바스터디 2자바스터디 2
자바스터디 2
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)
 
Java, android 스터티2
Java, android 스터티2Java, android 스터티2
Java, android 스터티2
 

이것이 자바다 Chap. 6 클래스(CLASS)(KOR)

  • 1. 객체 지향 언어 사용 이유 컴퓨터가 현실세계와 최대한 비슷하게 만들어지기 위해 (속성(필드) + 기능(메소드)) 특성 1. 캡슐화 : 외부객체가 접근을 못하게 함.(접근 제한자) 중요한 필드와 메소드를 보호 2. 상속(상위객체 + 하위객체) : 중복 코드를 줄여서 빨리 설계. 3. 다형성 : 같은 타입이지만 실행 결과가 다양한 객체를 이용. e.g. 컴퓨터1, 컴퓨터2 객체와 클래스 설계도(클래스) -> 객체(인스턴스)
  • 2. 객체 생성 new 연산자 : 힙영역에 객체 생성 후 객체의 주소를 리턴 (주소를 변수로 받아와서 사용) 클래스 선언 public class Student{ } e.g. 변수 = new 클래스();
  • 3. 클래스 구성(필드, 생성자, 메소드) 필드 : 데이터 저장, 변수와 비슷하지만 변수라고 부르지 않는다. : 자동 디폴트(0) 초기화 : 어디서든 선언 가능 cf) byte, char ※ 필드 vs 변수 필드는 생성자와 메소드 전체에서 사용되고 객체가 소멸되지 않으 면 소멸안됨. 변수는 생성자와 메소드 안에서만 사용되고 종료되면 소멸. ※필드 초기화 (1) 필드 선언 시 (2) 생성자 선언 시 ※필드 사용 e.g. myCar.company;
  • 4. 생성자 : 객체 생성시 초기화 담당. : 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비. : 클래스 이름으로 되어있고 리턴 타입이 없다. 생성자 선언 public class Car{ String nation = "대한민국";//필드 초기화 String color; Car(String c, int cc){ color = c; //생성자안에서 필드 초기화 //this.color = color; } } 생성자 호출해서 객체 생성 public class CarExample{ public static void main(String[] args){ Car myCar = new Car("Black", 3000); } }
  • 5. 생성자 오버로딩 public class Car{ Car() { ... } Car(String model) { ... } Car(String model, String color) { ... } } Car car1 = new Car(); Car car2 = new Car("에쿠스"); Car car3 = new Car("에쿠스", "검정색"); : 생성자 다양화. 클래스 내에 같은 이름의 생성자를 여러 개 선언하는 것. 다른 생성자 호출(this()) public class Car{ String model; Car(String model) { this(model, color, 250) } Car(String model, String color, int maxSpeed) { this.model = model; } }
  • 6. 메소드 : 필드를 읽고 수정, 다른 객체 생성, 객체 간 데이터 전달의 수단. ※함수 vs 메소드 함수 : 반환타입 함수이름 ( 파라미터 리스트 ) { 내용 return 값; } 메소드 : 클래스 안에서 사용되는 함수.(멤버함수) 데이터타입에 의존적인 함수. (자바에서는 main 함수가 아니라 main 메소드)
  • 7. 메소드 선언 리턴타입 메소드이름([매개변수선언, ...]){ //실행블록 } ※ 메소드이름 : 숫자로 시작, 특수 문자 X (관례적으로 소문자로 작성, 혼합된 이름이면 뒤의 단어의 첫글자는 대문 자) ※ 매개 변수 선언 : 필요한 데이터를 외부로부터 받기 위해 사용. cf) 매개 변수의 수를 모를 경우 : 배열 타입으로 선언 또는 ...을 사용 (메소드 호출 시 배열로 넣을 필요가 없이 리스트로 나열) ※ 리턴값 : 리턴값이 없는 메소드 return ; int sum1(int[] values) {...} int sum2(int ... values) {...} int result1 = sum1(new int[] {1, 2, 3, 4, 5}); int result2 = sum2(1, 2, 3, 4, 5);
  • 8. 메소드 호출 : 클래스 내/외부의 호출로 나뉨. void 외부메소드(){ Car car = new Car(); //객체생성 car.run(); } void 내부메소드(){ run(); } void run(){ ... } 메소드 오버로딩 int plus(int x, int y){ int result = x + y; return result; } double plus(double x, double y){ double result = x + y; return result; }
  • 9. 인스턴스 멤버와 this : 객체(인스턴스)를 생성해서 사용하는 필드, 메소드를 인스턴스 멤버라고 함. public class Car{ String model; Car(String model){ this.model = model; } void setModel(String model){ this.model = model; } } ※this Car myCar = new Car(); myCar.gas = 10; myCar.setSpeed(60); Car myCar = new Car(); myCar.setModel("벤츠"); Car myCar = new Car("벤츠");
  • 10. 정적 멤버와 Static 정적(static) 멤버(클래스 멤버) : 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소 드. ※인스턴스 필드 vs 정적 필드 : 객체마다 다른 값을 가지는 데이터면 인스턴스 필드. 공용적인 데이터면 정적 필드. public class Calculator { String color; static double pi = 3.14159; } ※인스턴스 메소드 vs 정적 메소드 : 인스턴스 필드를 이용한다면 인스턴스 메소드. 인스턴스 필드를 이용하지 않는다면 정적 메소드. public class Calculator { String color; void setColor(String color) {this.color = color;} static int plus(int x, int y) { return x+y;} }
  • 11. 정적 필드 초기화 : (1) 선언 시 (2) 정적 블록(복잡한 초기화 작업) public class Television { static String model = "LCD"; static String info; static { info = company + "-" + model; } } ※주의사항 : 정적 메소드, 정적 블록 내부에 인스턴스 필드나 메소드를 사용할수없다. (정적 메소드나 정적 블록이 객체가 없어도 실행되기 때문에) => this도 사용 불가 해결=> 객체를 생성한 후 사용.(main도 마찬가지) int field1; static void Method() { field1 = 10; //Error } static void Method(){ ClassName obj = new ClassName(); obj.field1 = 10; }
  • 12. Singleton (싱글톤) : 단 하나의 객체만 만들어야 할때 외부에서 new 연산자로 생성자를 호출 못하게 막는 방법. pulic class 클래스 { //정적 필드 private static 클래스 singleton = new 클래스(); //생성자 private 클래스() {} //정적 메소드 static 클래스 getInstance() { return singleton; } } 클래스 변수1 = 클래스.getInstance(); 클래스 변수2 = 클래스.getInstance(); 클래스 변수1 = new 클래스(); 클래스 변수2 = new 클래스(); //컴파일에러
  • 13. Final 필드 : 프로그램 실행 도중에 수정할 수 없다. => 초기화 : 1) 필드 선언시 2) 생성자 선언 시 => e.g. 주민등록번호 ※상수(static final) e.q. 원주율, 지구의 둘레. final 타입 필드; static final 타입 필드;
  • 14. 패키지 : 클래스를 체계적으로 관리하기 위해 폴더기능. : 상위 패키지, 하위 패키지.
  • 15. 패키지 선언 package 상위패키지.하위패키지. ※다른 패키지에 속하는 클래스를 사용하려면 (1) 패키지와 클래스 기술 (2) import (1) com.hankook.Tire tire = new com.hankook.Tire(); (2) import com.hankook.Tire; //import com.hankook.*;
  • 16. 접근 제한자 : 데이터 보호, 객체 생성을 막기 위해서, 특정 메소드를 호출 못하게 하기 위해서
  • 17. Getter/Setter Method : 객체의 무결성이 깨지는 것을 막기 위해서 객체 지향 프로그래밍에서는 메소드를 통해서 데이터를 변경하는 방법을 선호. e.g. 자동차의 속도는 음수가 될 수 없는데, 외부에서 음수로 변경하면 객체의 무결성이 깨진다. private 타입 fieldName; //Getter public 리턴타입 getFieldName(){ return fieldName; } //Setter public void setFieldName(타입 fieldName) { this.fieldName = fieldName; }
  • 18. 어노테이션(Annotation) : 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할것 인지를 알려주는 정보이다. e.g. @AnnotationName ※용도 (1) 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공. (2) 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동르로 생성할 수 있 도록 정보를 제공. (3) 실행시 (런타임 시) 특정 기능을 실행하도록 정보를 제공.