본문 바로가기
휴지통/IT 스크랩

[JAVA] #2 클래스와 객체

by 빨강자몽 2019. 3. 23.

클래스(Class)

  • 클래스 : 객체의 속성과 기능을 코드로 구현한 것을 말한다.
  • 멤버변수 : 클래스의 속성들을 말한다.
ex) 학생 클래스에 멤버변수가 학번, 학생이름, 학년이 들어있는 경우



변수(Variable)

  • 기본 자료형 : int, long, float
  • 참조 자료형 : String, Student, Book (JDK 제공 or 다른 클래스)
  • 이름 짓기 규약
    - 클래스 : 대문자로 시작한다 ex) Student, Book
    - 메서드, 변수 : 소문자로 시작하고, 의미있는 단어 사용시 대문자로 시작한다. ex) setStudentName, studentName

메서드(Method)
  • 클래스와 관련된 기능을 구현한다. ( c 언어    ex) 두개의 값의 합을 출력하는 메서드
        ex) 두개의 값의 합을 출력하는 메서드
1
2
3
4
5
6
public int add(int num1,int num2)
// 반환형 함수이름(매개 변수)
{
    int result = num1+num2;
    return result
}
cs


인스턴스(Instance)
  • 클래스가 메모리 공간에 생성된 상태를 인스턴스라고 한다.
  • 스택영역의 참조변수 student1는 힙 영역의 student1의 인스턴스의 주소를 가진다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public clsss Student{
    public static int studentNumber=1000;
    String studentName;
    int grade
}
 
public class Test{
    public static void main(String[] args){
    Student student1 = new Student()
    student1.studentName="kim";
    Student student2 = new Student()
    student1.studentName="Lee";
    Student student2 = new Student()
    student1.studentName="Park";
    }
}
cs

패키지(Package)
  • 비슷한 일을 하는 클래스 파일들의 묶음을 말한다.
  • 프로젝트 전체 소스 코드를 구성하는 계층 구조이다.
  • 클래스의 이름이 중복되는 경우가 있더라도 패키지 경로가 다르면 문제가 발생하지 않는다.

생성자(Constucter)
  • 디폴트 생성자 : 자바 컴파일러가 자동으로 만들어주는 기본 생성자
  • 생성자 오버로드 : 클래스에서 생성자가 2개이상 제공되는 경우를 말한다.
    (자바에서 오버로드란? 메서드의 이름이 같고 매개변수만 다른 경우를 말한다.)
1
2
3
4
5
6
7
8
9
public Student(){                                        // 디폴트 생성자
}
public Student(int studentNumber){                        // 생성자 오버로드
    this.studentNumber = studentNumber;
}
public Student(int studentNumber, String studentName){    // 생성자 오버로드
    this.studentNumber = studentNumber;
    this.studentName = studentName;
}
cs


접근 제어자(Access Modifier)
  • 클래스 내부의 변수, 메서드, 생성자에 대한 접근 권한을 지정한다.
  • public : 외부 클래스 어디에서나 접근 가능
  • protected : 상속 관계의 클래스에서만 접근 가능
  • private : 같은 클래스 내부에서만 접근가능

this 예약어
  • 자신의 메모리를 가르키는(생성된 인스턴스를 가르키는) 예약어
        ex) 생성자에서 다른 생성자를 호출하는 this
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public clsss Person{
    String name;
    int age;
 
    person(){
        this.name="이름없음";
        this.age=1;
        // 위의 두 줄 this("이름 없음",1)로 바꿀 수 있다. 
        // this를 이용하여 생성자에서 다른 생성자를 호출할 수 있다.
    }
    
    person(String name, int age){
        this.name=name;
        this.age=age;
    }
}
cs


static 변수(정적변수, 클래스변수)
  • 클래스에서 공용으로 사용하는 변수
        ex) 학생을 추가할 때마다 학번을 1씩 증가시켜 학번을 생성하고자 할때 모든 인스턴스에게 동일하게 사용되는 하나의 변수
              학생 kim, lee를 생성하고 studentNumber를 2증가시키고, 두 student1, student2의 studentNumber을 출력하면 1002이 각각 나온다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public clsss Student{
    public static int studentNumber=1000;
    String studentName;
    int grade
}
 
public class Test{
    public static void main(String[] args){
    student kim = new Student();
    student lee = new Student();
    kim.studentNumber++;    // Student.studentNumber++;과 동일
    Student.studentNumber++;
    }
}
cs


클래스 메서드(Class Method)
  • static 변수를 위한 메서드
  • 클래스 메서드 안에서는 인스턴스 변수 사용 불가능하다.
1
2
3
4
5
6
7
8
9
public clsss Student{
    public static int studentNumber;
    String studentName;
    
    public static int setStudentNumber(){
        this.studentName= "이루방"-> 오류
        Student.serialNumber=50;
    }
}
cs



변수의 유효범위와 메모리 영역

  • 지역변수(로컬 변수) : 메서드 내부에서 선언, 함수가 호출될 때 스택(stack)에 생성, 함수 호출&반환 시 생성&소멸한다.
  • 멤버변수(인스턴스 변수) : 클래스 어느 메서드에서나 사용가능, 클래스가 생성될 때 힙(heap)에 생성, 가비지 컬렉터가 수거하면서 사라진다.
  • static변수(정적 변수, 클래스 변수) : 프로그램 실행시 데이터 영역에 생성, 프로그램 실행&종료 시 생성&소멸 한다.



싱글톤 패턴(Singleton Pattern)

  • 단 하나의 인스턴스가 필요한 디자인 패턴을 말한다.
  • static을 응용하여 프로그램 전반에서 사용하는 단 하나의 인스턴스를 구현한다.
        ex) 대한민국에 사는 사람들을 관리하는 프로그램에서 나라 객체는 단 하나 대한민국만 필요하다.