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

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