1. 클래스

  • 클래스는 객체를 정의한다
  • 클래스는 객체를 생성하는데 사용한다
  • 클래스는 객체를 만들기 위한 설계도라고 할 수 있다

 1) 클래스 구성

  • 필드(field) : 클래스의 속성을 나타내는 변수이다
  • 메서드(method) : 클래스의 기능을 나타내는 함수이다
  • 생성자(constructor) : 클래스의 객체를 생성하는 역활을 한다
  • 이너클래스(inner class) : 클래스 내부의 클래스를 의미한다
  • 위의 4가지 요소로 구성된다
  • 필드, 메서드, 이너클래스를 통틀어 멤버(member)라고 한다
더보기

■ 자동차를 예로 필드의 속성과 메서드의 기능을 알아보자

속성 { 모델, 바퀴의 개수, 도어의 개수, 색상 등... }     ->      class Car {
 //변수 선언을 통해 나타낸다                                                   private String model ;
                                                                                                 private int wheels;
                                                                                                 private int doors;
                                                                                                 private String color;

기능 { 시동, 가속, 정지, 와이퍼 작동 등...}                 ->          void power( ) {....};
//함수를 통해 나타낸다                                                            void accelerate( ) {....};
                                                                                                void stop( ) {....};
                                                                                                void wipers( ) {....};
                                                                                           }   

public class Example {                //Example class 선언
	int a = 10;                       //필드
	if a(){ };                        //메서드 
    void printX() {...}               //메서드
	Example exe = new Exanple()       //생성자
	class Example2 {...}              //이너 클래스
}

 2) 클래스 추가 정의

  • 클래스 == 데이터 + 함수 의 결합으로 사용할 수 있다
    - 클래스 : 데이터와 함수의 결합 (구조체 + 함수)
    - 데이터는 변수와 같다
    - 함수는 메서드와 같으며, 명령문의 집합체이다
    - 함수의 작업은 데이터를 재료로 계산을 한다
    - 데이터와 함수는 상호 관련성이 있으므로 결합하여 사용하는 것이 용이하다

  • 데이터 저장의 변화는 다음과 같다
    - 변    수 : 하나의 데이터를 저장할 수 있는 공간
    - 배    열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
    - 구조체 : 서로 다른 종류의 데이터라도 관련성이 있다면 하나로 저장할 수 있는 공간
    - 클래스 : 데이터와 함수의 결합 (구조체 + 함수)

 

  • 클래스는 사용자 정의 타입이다
    - 원하는 타입을 사용자가 직접 만들 수 있다

    ex) 사용자 정의 변수를 통하여 코그의 단순화한 경우

 

2. 객체

  • 실제로 존재하는 사물이나 개념, 논리 등을 말한다
  • 객체가 가지는 기능과 속성에 따라 사용되는 용도가 다르다
  • 실제 존재물 HW을 컴퓨터가 실행할 수 있는 SW 로 만들는 과정에서 사용된다
  • 모든 인스턴스를 대표하는 일반적 용어이다
  • 클래스를 객체로 생성하기 위해서 메모리로 할당하는 과정을 인스턴스화 한다고 말한다

 1) 구성요소

  • 객체 = 속성(변수) + 기능(메서드) 로 구성된다
  • 객체를 사용하기 위해서는 속성과 기능을 부여해 줘야 한다
  • HW를 분석하여 SW화 하는 방법이다

 2) 객체의 생성

  1. 클래스명 ; //클래스를 선언한다
  2. 클래스명 변수명 ; //클래스의 객체를 참조하기 위한 변수(참조변수)를 선언한다
  3. 변수명 = new 클래스명( ) ; //클래스 인스턴스를 생성하여 참조변수에 주소를 저장한다. 메모리에 참조변수 영역을 확보한 객체가 생성된다
  4. 2와 3은 다음과 같이 줄여서 사용할 수 있다 -> Audio audio = new Audio( );

    ex) 1 class Audio;                             class Audio;  

          2 Audio audio;                 ->        Audio audio = new Audio( );

          3 audio = new Audio( );

 

 3) 객체의 사용

  • 클래스 작성 -> 객체 생성 -> 객체 사용 의 순서로 작성한다
    - 클래스는 객체를 만들기 위한 설계도 역활이며, 객체는 객체를 사용하기 위하여 생성된다.
  • 객체의 사용은 변수와 메서드를 사용한다는 의미이다
  • 객체 사용 시에는 참조변수를 필히 호출하여 사용한다
    - 참조변수.멤버변수 = 값 ; //참조변수 객체의 멤버변수에 값을 저장하는 경우에 사용한다
      ex) audio.volume = 50 ; //오디오 객체의 볼륨변수의 값을 50으로 저장한다 

    - 참조변수.메서드변수( ) ; -> 참조변수 객체의 메서드변수를 호출하여 실행하는 경우에 사용한다
      ex) audio.volumeup( ) ; //오디오 객체의 볼륨변수에 있는 기능을 실행시킨다 (volume++)
  • 변수가 생성되면 기본값으로 초기화된다

ex1) 

 

ex2)

ex3)

class Audio {
   public static void main(String arg[]){
       Audio audio = new Audio( );
       audio.model;//변수 사용
       audio.power = power; //전원 true
       audio.volume = 50; //현재 볼륨 입력
       audio.volumeup( ); //메서드 사용, 볼륨 +1 상승 = 50+1 = 51
       System.out.println("현재의 볼륨은" + audio.volume + "입니다");
	}
}
class audio {
	String model;
    Int volume;
    boolean power = power;
    
    audio.model( ) {“white”;}
    audio.power( ) {power = !power;}
    audio.volumeup( ) {volume++;}
    audio.volumedown( ) {volume--;}
}

result
"현재의 볼륨은 51입니다

 

 

import java.util.Scanner;  //Scanner 유틸 호출

//간이계산기 프로그램 
public class Calculator {
    public static void main(String[] args) { //maun 메서드 선언
        Scanner scan = new Scanner(System.in); //Scanner 객체 생성 : 외부입력

        System.out.println("첫 번째 숫자를 입력하세요."); //콘솔출력
        String no1 = scan.nextLine(); //첫 번째 숫자 입력
        
        System.out.println("사칙연산자를 입력하세요.");
        String op = scan.nextLine(); //사칙연산자 입력

        System.out.println("두 번째 숫자를 입력하세요.");
        String no2 = scan.nextLine(); //두 번째 숫자 입력

        int num1 = Integer.parseInt(no1); //입력받은 첫 번째 문자를 숫자형으로 변환
        int num2 = Integer.parseInt(no2); //입력받은 두 번째 문자를 숫자형으로 변환
        int result;

        if(op.equals("+")) {              //덧셈 연산
            result = num1 + num2;
        }
        else if(op.equals("-")) {         //뺄셈 연산
            result = num1 - num2;
        }
        else if(op.equals("/")) {         //나누기 연산
            result = num1 / num2;
        }
        else{
            result = num1 * num2;         //곱하기 연산
        }

        System.out.println(no1 + " " + op + " " + no2 + " = " + result); // 결과값 출력
    }
}

 

3. 소스파일과 클래스의 관계

  • 하나의 소스 파일에는 하나의 public class만 존재해야 한다
  • 또한, 하나의 소스 파일에는 하나의 클래스만 존재하는 것을 권장한다
  • 소스파일의 이름은 main 메서드가 있는 클래스의 이름과 일치해야 한다
  • 하나의 소스 파일에 여러 개의 클래스가 존재할 경우 소스파일의 이름은 아래와 같이 사용한다
소스파일 클래스 내용
Hello1.java public class Hello1 { }
           class Hello2 { }
public class가 있는 경우
소스파일의 이름은 반드시 public class 이름과 일치해야 한다
class Hello1 { }
class Hello2 { }
public class가 없는 경우
소스파일의 이름은 Hello1, Hello2 어떤 것을 사용해도 상관없다
  • 아래와 같은 경우는 오류가 발생한다
소스파일 클래스 내용
Hello1.java public class Hello1 { }
public class Hello2 { }
하나의 소스파일에 두 개 이상의 public class가 존재할 수 없다
각 클래스를 별도의 소스파일로 나눠서 저장하거나 class 중 한 개의 public를 삭제해야 한다
Hello2.java public class Hello1 { }
          class Hello2 { }
소스파일의 이름과 public class의 이름이 일치하지 않는다
소스파일의 이름을 Hello1.java로 변경해야 한다
hello1.java public class Hello1 { }
          class Hello2 { }
소스파일의 이름과 public class의 이름이 일치하지 않는다
소스파일의 이름은 대소문자도 일치해야 한다
소스파일의 이름을 대문자 H로 변경해야 한다

 

 

 참조 링크

해시넷 객체 : http://wiki.hash.kr/index.php/%EA%B0%9D%EC%B2%B4

 

객체 - 해시넷

객체(客體) 또는 오브젝트(object)란 객체 지향 프로그래밍(OOP)에서 클래스(class)가 실제로 구현된 인스턴스(instance)를 말한다. 즉, 객체란 클래스를 인스턴스화한 것이다. 절차적 프로그래밍과 달

wiki.hash.kr

위키피아 객체 : https://en.wikipedia.org/wiki/Object_(computer_science) 

 

Object (computer science) - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Arbitrarily defined dataset with specified properties used in some programming paradigms In computer science, an object can be a variable, a data structure, a function, or a method. As

en.wikipedia.org

▶  Classes & Objects | Java | Tutorial 26 : https://www.youtube.com/watch?v=Mm06BuD3PlY

 

 

1. 클래스란?

  • 자바 프로그램 구성의 기본 단위이다
  • 객체(object)를 생성하기 위하여 정의한 설계도(blueprint) 또는 틀(frame)이다
  • 객체(object)는 클래스(class)에 의해 정의되고, 클래스에 의해 설계된 내용을 생성한 결과물이다
  • 자바는 객체지향 언어이기 때문에 모든 코드를 클래스 내에서 작성한다
  • 객체의 구조를 클래스 내에서 코드로 정의하면 이후에 동일한 구조의 클래스는 쉽게 생성할 수 있다
  • 객체의 상태는 필드(데이터)로, 행위는 메소드로 구현된다
  • 객체는 특정 클래스의 인스턴스이다
  • 클래스는 자체로 타입으로 사용할 수 있으며 연관된 기능들을 묶을 수 있다

  ※ 인스턴스(instance)

  • 클래스를 통해 생성된 객체를 말한다
  • 클래스로부터 객체를 만드는 과정을 '인스턴스화(instantiate)라고 한다
  • 객체와 인스턴스는 비슷한 맥락의 의미를 가지지만 객체가 메모리에 할당되어 구현될 때를 인스턴스로 볼 수 있다

제품과 클래스 구분 예시

2. 클래스 구성

 1) 필드(field)

  • 클래스의 속성(state)을 나타내는 변수
  • 모델명, 컬러, 바퀴의 수 등등...

 2) 메서드(method)

  • 클래스의 기능(behavior)을 나타내는 함수
  • 시동걸기, 가속하기, 정지하기 등등...

 3) 생성자(constructor)

  • 클래스의 객체를 생성하는 역할

 4) 이너 클래스(inner class)

  • 클래스 내부의 클래스를 의미

※ 필드, 메서드, 이너클래스 3요소를 클래스의 멤버(member)라고 부른다

 

 

※ 참조 링크

▶ 해시넷 클래스 : http://wiki.hash.kr/index.php/%ED%81%B4%EB%9E%98%EC%8A%A4

 

클래스 - 해시넷

클래스(class)란 객체 지향 프로그래밍(OOP)에서 새로운 객체(object)를 만들기 위한 템플릿을 말한다. 클래스를 사용하여 인스턴스(instance)를 생성함으로써 객체를 만들 수 있다. 파일 확장자는 .class

wiki.hash.kr

위키피아 클래스 : https://en.wikipedia.org/wiki/Class_(computer_programming) 

 

Class (computer programming) - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Definition in programming that specifies how an object works In object-oriented programming, a class is an extensible program-code-template for creating objects, providing initial valu

en.wikipedia.org

 

 

3. 내부 클래스(Inner Class)

  • 클래스 내에 선언된 클래스이다
  • 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용한다
  • 내부 클래스를 사용하면 외부 클래스의 멤버들에 쉽게 접근 할 수 있고, 코드의 복잡성을 줄일 수 있다
  • 외부적으로 불필요한 데이터를 감출 수 있어 캡슐화(encapsulation)를 달성하는 데 유용하다
  • 기본적으로 내부 클래스는 외부 클래스 내에 선언된다는 점을 제외하면 일반 클래스와 차이점이 없다
    - 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용의 편의성을 고려하여 만들어진 문법 요소이다
class Outer { // 외부 클래스
	
	class Inner {
		// 인스턴스 내부 클래스	
	}
	
	static class StaticInner {
		// 정적 내부 클래스
	}

	void run() {
		class LocalInner {
		// 지역 내부 클래스
		}
	}
}
  • 내부 클래스의 종류는 세가지로 구분한다
    - 인스턴스 내부 클래스
    - 정적 내부 클래스
    - 지역 내부 클래스
  • 세 가지 내부 클래스는 변수가 선언 위치에 따라 인스턴스 변수, 클래스 변수, 그리고 지역 변수로 구분되는 것과 유사하게 그 위치를 중심으로 구분될 수 있다
  • 각각의 유효범위(scope)와 특성이 변수의 구분과 매우 유사하다
  • 내부클래스 종류
종 류 선언 위치 사용 가능한 변수
인스턴스 내부 클래스
(instance inner class)
외부 클래스의 멤버변수 선언위치에 선언(멤버 내부 클래스) 외부 인스턴스 변수
외부 전역 변수
정적 내부 클래스
(static inner class)
외부 클래스의 멤버변수 선언위치에 선언(멤버 내부 클래스) 외부 전역 변수
지역 내부 클래스
(local inner class)
외부 클래스의 메서드나 초기화블럭 안에 선언 외부 인스턴스 변수
외부 전역 변수
익명 내부 클래스
(anonymous inner class)
클래스의 선언과 객체의 생성을 동시에 하는 일회용 익명 클래스 외부 인스턴스 변수
외부 전역 변수

 

 1) 인스턴스 내부 클래스(instance inner class)

  • 인스턴스 내부 클래스는 외부 클래스의 내부에 위치해 있다
  • private 접근 제어자(해당 클래스 안에서만 접근 가능한 멤버에 사용)를 사용하고 있음에도 내부에서 외부 클래스의 인스턴스 변수와 정적 변수에 각각 접근하여 해당 값을 사용하고 있다
  • 인스턴스 내부 클래스는 반드시 외부 클래스를 생성한 이후에 사용해야 한다
  • 클래스의 생성과 상관없이 사용할 수 있는 정적 변수와 정적 메서드는 인스턴스 내부 클래스에서 선언할 수 없다
class Outer{
    private int num = 1;
    private static int sNum = 2;
    private InnerClass innerClass;
    public Outer(){
       innerClass = new InnerClass();
    }

    class InnerClass{
        int inNum = 10;
        void innerMethod(){
            System.out.println("Outer num = " + num + "(instance variable of outer class)");
            System.out.println("Outer sNum = " + sNum + "(static variable of outer class");
        }
    }
    public void testClass(){
        innerClass.innerMethod();
    }
}

public class MainClass {
    public static void main(String[] args) {
        Outer outer = new Outer();
        System.out.println("call up inner class function used outer class");
        outer.testClass();
    }
}

 

 2) 정적 내부 클래스

  • 내부 클래스가 외부 클래스의 존재와 무관하게 정적 변수를 사용할 수 있는 것이 정적 내부 클래스이다
  • 인스턴스 내부 클래스와 동일하게 클래스의 멤버 변수 위치에 정의하지만 static 키워드를 사용한다
class Outer1{
    private int num = 3;
    private static int sNum = 4;
    void getPrint(){
        System.out.println("Instance Method");
    }
    static void getPrintStatic(){
        System.out.println("Static Method");
    }

    static class StaticInClass {
        void test() {
            System.out.println("Outer num = " + sNum + "(static variable of outer class)");
            getPrintStatic();
        }
    }
}
public class StaticInnerClass {
    public static void main(String[] args) {
        Outer1.StaticInClass a = new Outer1.StaticInClass();
        a.test();
    }
}

 

 

4. 지역 내부 클래스(local inner class)

  • 지역 내부 클래스는 클래스의 멤버가 아닌 메서드 내에서 정의되는 클래스이다
  • 지역 변수와 유사하게 메서드 내부에서만 사용가능하다
  • 일반적으로 메서드 안에서 선언 후에 바로 객체를 생성해서 사용한다
class Outer2{
    int num = 5;
    void test(){
        int num2 = 6;
        class LocalInClass{
            void getPrint(){
                System.out.println(num);
                System.out.println(num2);
            }
        }
        LocalInClass localInClass = new LocalInClass();
        localInClass.getPrint();
    }
}
public class LocalInnerClass {
    public static void main(String[] args) {
        Outer2 outer = new Outer2();
        outer.test();
    }
}

  • 지역 내부 클래스 LocalInClass가 메서드 안에서 선언되고 생성된 후에 정의된 메서드를 호출하여 외부 클래스의 변수들을 출력하고 있다
  • 내부 클래스는 기본적으로 개발자의 편의를 위해 서로 연관있는 클래스들을 연결시켜 주는 것이다

 

'JAVA' 카테고리의 다른 글

Java - 타입(Type)  (0) 2022.05.19
Java - 개요3. 파일 생성  (0) 2022.05.19
Java - 개요2. JVM & JDK  (0) 2022.05.18
Java - 개요1. 정의  (0) 2022.05.18
OOP - this  (0) 2022.05.13

+ Recent posts