2강. 클래스(class)
추천글 : 【Java】 Java 목차
1. 객체지향 프로그래밍 [본문]
2. class [본문]
3. call by value, call by reference [본문]
4. static [본문]
5. this [본문]
6. 생성자 [본문]
a. GitHub
1. 객체지향 프로그래밍(OOP, object-oriented programming) [목차]
⑴ java
① OOP design을 하도록 강제함
② java에서 모든 객체가 reference type
⑵ C++
① OOP design이나 procedural design를 선택할 수 있음
② C++에서는 객체를 정의하면 실제 객체가 됨 : 주소가 아닌 실제 값이라는 의미
2. 클래스(class) [목차]
⑴ 정의 : user나 API에 의해 정의된 데이터 타입. 객체의 청사진을 제공함
⑵ java class는 local variable과 달리 initialize가 자동으로 됨
3. call by value, call by reference [목차]
⑴ 예제
public class Main{
public static void main(String[] args){
int x = 1;
Foo foo1 = new Foo(3);
alterInt(x); // call by value
System.out.println(x); // 1
alterFoo(foo1); // call by reference(1)
System.out.println(foo1.value); // 3
alterFooTwo(foo1); // call by reference(2)
System.out.println(foo1.value); // 6
}
public static void alterInt(int x){
x ++;
}
public static void alterFoo(Foo foo){
foo = new Foo(10); // foo's pointer is updated, no longer indicating foo1
}
public static void alterFooTwo(Foo foo){
foo.value = 6;
}
}
class Foo{
int value;
Foo(int x){
value = x;
}
}
⑵ java는 사실 전부 call by value인데, .attribute로 접근 시 call by reference의 효과를 내는 것에 불과함
4. static [목차]
public class Main{
public static void main(String[] args){
A a = new A();
System.out.println(a.a); // 0
System.out.println(A.a); // 0
A.f1();
System.out.println(a.a); // 1
System.out.println(A.a); // 1
a.f2();
System.out.println(a.a); // 2
System.out.println(A.a); // 2
// A.f3(); // error
}
}
class A{
static int a;
static void f1(){
a = 1;
}
static void f2(){
a = 2;
}
void f3(){
a = 3;
}
}
⑴ 개요
① 정의 : 객체가 아니라 class에 속하도록 함
② 즉, static은 메모리를 공유하도록 하는 수식어
③ static method 및 attribute는 모든 인스턴스에서 선언되는 게 아니고 1회만 선언됨
⑵ static variable
① static으로 이미 선언된 변수는 데이터 영역에 저장되고 재선언 명령을 무시함
⑶ static method
① 예시
○ main 함수는 기본 메소드이기 때문에 java에서 반드시 static으로 선언돼야 함
○ 즉, 여러 인스턴스가 저마다 main 함수를 갖고 있을 필요가 없음
○ Scanner는 System.in뿐만 아니라 files 등에서도 입력을 받기 때문에 Scanner method는 non-static (ref)
② static method는 어떤 object를 지칭하는지 모르기 때문에 non-static method를 사용하는 행위가 금지됨
○ static method는 class 자체에 저장됨
○ 비슷한 이유로 static method는 static variable만을 연산할 수 있음 (ref)
○ static method에서 객체를 통해 instance method를 사용하는 것은 가능함
○ (참고) non-static method에서 static method를 사용하지 못할 이유는 없음
③ class 명으로 method에 접근하는 경우 반드시 그 method는 static으로 해야 함
○ static attribute, static method는 인스턴스로 접근할 수 있음
○ 이유 : 인스턴스에는 이미 class 정보가 포함되므로
⑷ 생성자는 항상 non-static으로 선언되고, static method와 별개의 문제임
① 즉, static method에서 non-static method를 사용하는 유일한 방법은 인스턴스로부터 호출하는 방법
5. this [목차]
class A{
int x;
public A(int input){
x = input;
}
public A(){
this(0);
}
}
⑴ this는 어떤 인스턴스가 method를 호출할 때, 그 method 내에서 그 인스턴스를 가리키기 위해서 사용됨
⑵ 예시 1. 생성자로 쓸 때
⑶ 예시 2. return this;
⑷ 예시 3. 그 인스턴스의 같은 이름의 변수와 구별하기 위해 사용
void METHOD(int x, int y){ ...this.x = x... }
⑸ 그 밖에는 this를 쓰나 안 쓰나 크게 상관은 없음
6. 생성자(constructor) [목차]
⑴ constructor는 return type이 없음
⑵ 생성자의 이름은 class의 이름과 동일함
⑶ 생성자가 꼭 하나일 필요는 없음
⑷ 생성자는 거의 대부분 public으로 선언됨 : 때때로 singleton architecture를 구현하기 위해 private으로 선언하기도 함
⑸ contructor에서 chaining constructor 호출은 가능한데 여러 constructor를 호출하는 건 불가능
⑹ (참고) constructor overriding은 허용되지 않음
입력: 2020.09.23 17:03
'▶ 자연과학 > ▷ Java' 카테고리의 다른 글
【Java】 5강. 다형성(polymorphism) (0) | 2020.09.23 |
---|---|
【java】 4강. 상속(inheritance) (0) | 2020.09.23 |
【Java】 3강. 캡슐화 (0) | 2020.09.23 |
【Java】 1강. 자바 시작하기 (0) | 2020.09.23 |
【Java】 자바로 이진트리와 수식 계산 (0) | 2016.06.27 |
최근댓글