SlideShare a Scribd company logo
객체 지향 언어
사용 이유
컴퓨터가 현실세계와 최대한 비슷하게 만들어지기 위해
(속성(필드) + 기능(메소드))
특성
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) 실행시 (런타임 시) 특정 기능을 실행하도록 정보를 제공.

More Related Content

PPTX
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
PDF
Swift3 subscript inheritance initialization
PDF
Swift3 generic
PDF
Swift3 typecasting nested_type
PPTX
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
PPTX
파이썬 class 및 function namespace 이해하기
PDF
Start IoT with JavaScript - 1.기초
PDF
Java 변수자료형
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
Swift3 subscript inheritance initialization
Swift3 generic
Swift3 typecasting nested_type
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
파이썬 class 및 function namespace 이해하기
Start IoT with JavaScript - 1.기초
Java 변수자료형

What's hot (19)

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

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

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

이것이 자바다 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) 실행시 (런타임 시) 특정 기능을 실행하도록 정보를 제공.