본문 바로가기
Java/Java 이론 정리

[Java] 18~20, 23~25일차: 클래스_변수, 생성자, 오버로딩, 추상클래스, 인터페이스

by ProSeraphina 2020. 7. 8.
데이터 저장   >> 데이터 처리   >> 데이터 출력
  1. 변수(데이터 1개)
  2. 배열(데이터 여러 개, 같은 타입)
  3. 클래스(데이터 여러 개, 다른 타입)
연산자, 제어문 활용

메소드
Application(dos창)→Windows
Web Application
mobile Application

 

데이터 저장공간

1. 메소드 영역: static메소드 저장

 

2. 스택: 자체에서 메모리 관리 수행. {블럭} 내에서만 저장되며,

          지역변수, 매개변수 등이 저장됨. LIFO(Last-In, First-Out) 구조.

 

3. 힙: 사용자가 관리하는 공간. 클래스가 저장된다.

        null, 0 등으로 초기화 된 값은 가비지콜렉터가 관리한다.

 

 

#클래스

1. 정의 및 종류

 - 클래스: 객체를 생성하는데 사용되는 틀. 객체의 모든 속성과 기능이 정의되어 있음(≒이데아)

             서로 관련된 변수들을 정의하고, 이들에 대한 작업을 수행하는 함수들을 함께 정의한 것.

 - 객체(인스턴스): 클래스의 하위개념으로, 실존하는 각각의 개체(≒사물)

    ex) 클래스: 야구선수, 객체: 이정후, 김하성 등

 

 - 클래스 종류

   1)일반클래스

     형식) public class className{

                 멤버변수, 공유변수

                 생성자

                 메소드

             }

    i)데이터형으로만 사용 필요한 데이터 모아서 관리(캡슐화): 데이터 은닉화(private), 메소드 통해 접근(getter/setter)

   ii)액션→ 기능만 가지고 있음(메소드)

  iii) 변수+메소드 혼합

                    

   2)추상클래스: 단일상속, 공통의 속성을 지닌 미완성 클래스. 구현 안 된/된 메소드 모두 있음

                     여러 개 클래스에 공통으로 적용되는 메소드가 있는 경우 추상클래스 제작

                     또는 경우의 수가 많아 메소드 구현이 어려운 경우(ex. 버튼 클릭)

                     인스턴스는 생성 불가  반드시 구현된 클래스를 통해 메모리 할당(A a=new B;)

                     기본틀이 제작되어 구현이 쉬움. 요구사항 분석이 많이 사용                 

             형식) public abstract class className{

                       멤버변수, 공유변수

                       구현 안 된 메소드 → 미완성 클래스

                       구현 된 메소드

                     }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.sist.abs;
 
abstract class 도형{ //추상클래스: 상속받은 메소드에서 구현
    public abstract void draw(); //추상메소드
    public void color() {
        System.out.println("검정색으로 그림 그린다");
    }
}
class 삼각형 extends 도형{
    public void draw(){
        System.out.println("삼각형 그린다");//추상메소드 구현(오버라이딩)
    }
    //추상클래스의 일반 메소드 정의 변경: 오버라이딩(재정의)
    @Override
    public void color(){
        System.out.println("빨간색으로 그림 그린다");
    }
}
 
class 사각형 extends 도형{
    @Override
    public void draw(){
        System.out.println("사각형 그린다");
    }
}
 
public class MainClass{
    public static void main(String[] args){
        도형 g=new 삼각형(); //g로 모두 제어 가능
        g.color();
        g.draw();
        
        g=new 사각형();
        g.color();
        g.draw();
   //주의: 도형 a=new 도형(); => 에러,
// ∵구현되지 않은 클래스에서 메모리 할당 불가
    }
}
 
//결과
빨간색으로 그림 그린다
삼각형 그린다
검정색으로 그림 그린다
사각형 그린다
cs

 

   3)인터페이스: 추상클래스가 확장된 형태, 다중상속 가능.

                      여러 개의 클래스를 묶어서 관리(관계없는 클래스들에게 관계를 맺어줌) → 웹프로그램

            형식) public  interface interfaceName{

                         멤버변수, 공유변수: 상수형 변수(public final static, private, protected 사용금지)

                         only 구현 안 된 메소드

                         ***단, JDK1.8이상부터 default로 구현된 메소드 작성가능

                         ***실무에서 주로 JDK1.7, 오라클 11g, 스프링 3.7~3.8 사용  다 알아둬야함

                       }

                     - 인터페이스에 선언된 모든 메소드: public abstract

                      ex) public interface B{

                               public abstract(생략) void display( ); 

                           }

                      - 인터페이스에 선언된 모든 변수: public final

                         int a; ==JVM==> public static final(생략) int a;

                      - 인터페이스는 상위클래스이므로 상속을 내려야 사용 가능 (다중상속 가능)

                interface >> interface: extends

                interface >> class: implements

           ex1) interface A, interface B, class C가 있을 때

                                    class C implements A,B (O)

           ex2) interface A, class B, class C가 있을 때

                                    class C extends B implements A (O)

             - 구현이 안 된 메소드는 반드시 구현해서 사용해야 함(빨간 밑줄 나옴)

            ex) interface A{ //주의: 모든 메소드는 pulic 메소드!!! → 접근지정어 주의!(∵축소 불가능)

                       (public abstract) void aaa( ); 

                }

                class B implements A{

                        public void aaa( ){ }  //블럭이 열고 닫히는 순간 구현. 

                }

 *추상클래스, 인터페이스: 여러 개의 클래스를 모아서 관리; 서로 다른 클래스 연결해서 사용

                                 →결합성이 낮은 프로그램

                                     ***결합성: 클래스 수정할 때 다른 클래스에 영향을 주는가?(낮을수록 좋음)

                                         응집성: 한 개의 기능 수행할 수 있는 능력(메소드)

((인터페이스 예시))

1. Container.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.sist.inter;
import java.util.*;
//인터페이스: 여러 개의 클래스를 묶어서 인터페이스로 관리
interface Connection{
    public void connection();
}
 
class 오라클 implements Connection{
    public void connection() {
        System.out.println("오라클 연결");
    }
}
 
class DB2 implements Connection{
    public void connection() {
        System.out.println("DB2 연결");
    }
}
 
class MSSQL implements Connection{
    public void connection() {
        System.out.println("MSSQL 연결");
    }
}
 
class MySQL implements Connection{
    public void connection() {
        System.out.println("MySQl 연결");
    }
}
 
public class Container{
    Map map=new HashMap();
    public Container() {
        map.put("oracle",new 오라클());
        map.put("db2",new DB2());
        map.put("mssql",new MSSQL());
        map.put("mysql",new MySQL());
    }
    public Connection getBean(String key) {
        return (Connection)map.get(key);
    }
}
cs

2. MainClass.java

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.sist.inter;
//클래스 여러 개를 묶어서 관리 가능: 인터페이스의 목적
public class MainClass{
 
    public static void main(String[] args){
        Container c=new Container();
        Connection conn=c.getBean("oracle");
        conn.connection();
        
        conn=c.getBean("mssql");
        conn.connection();
    }
}
cs

 

*** 자바 지원 인터페이스

1. Window(javax.swing)

인터페이스 구현되는 메소드
 ActionListener
 : 버튼, 메뉴, text에서 엔터
actionPerformed()
 MouseListener
 : 마우스 관련, JTable / JTree / JLabel

mouseClicked()
mouseReleased()
mousePressed()
mouseEntered()
mouseExited()

 MouseMotionListener

mouseMoved()
mouseDragged()

 KeyListener 
 : 키보드 관련

keyPressed()
keyReleased()
keyTyped()

 FocusListener focusLost()
focusGained()
 ItemListener 
 : Combobox / JList
itemStateChanged()

2. 데이터베이스 연결★

 - Connection

 - Statement

 - ResultSet

 

   4)내부클래스: 클래스 안의 클래스 

       -멤버클래스: 두 개이상의 클래스에서 한 개의 데이터 공유할 경우(static 사용도 가능은 함) 

                        →네트워크 프로그램 / 쓰레드 프로그램 / 빅데이터, AI(수집한 자료 실시간 분석)

         class A{

             a, b, c → 자료 수집

             class B{ //클래스 안의 클래스: 클래스 A의 자료를 모두 쓰고 싶을 때

                (a, b, c 갖다쓸 수 있음) → 수집한 자료 분석

             }

          }

         class C{

           B b=new B();  불가

           A.B b;

         }

 

       -지역클래스

        class B{

              public void display( ){

              }

          }

 

       -익명클래스: 상속 없이 오버라이딩(쓰레드/윈도우/네트워크 → 웹)

         class A{

         }

         class B {

         }        

         class C extends A(

             B b=new B( ){

                오버라이딩(재정의, 추가) 가능

              }

          }

 

   5)종단클래스: 확장 불가(ex. String, Math, System)

      ex) final class A

 

2. 클래스 구성요소

멤버/공유변수 설정

      메소드              →  묶어서 재사용  →  객체지향 프로그램

      생성자

(모두 있을 필요 없음, 필요한 것만 생성.

 단, Main 메소드는 반드시 필요!)

 

 

3. 저장방법

 1)클래스 내 변수 저장

종류
전역변수 일반변수
  class 전체에 적용(다른 class에서도 사용 가능)

  - 멤버변수(=인스턴스 변수) 
     : 따로따로 저장, 변경시 자기만 바뀜.
     ex) 각 메뉴이름 등
          scan.nextInt( )
 
 - 공유변수(=공통변수, 클래스변수)
     : static~, 자동저장, 1개만 저장 가능, 
      변경시 전체변경되므로 주의!!
      ex) 홈페이지 로고
           Math.random( )
  메모리 자체에서 관리({ } 내에서만 사용)
  - 지역변수
  - 매개변수
저장방법   class Saram{  →12byte(멤버변수 3개)
     String name;
     int age;
     String sex;
     static String 학원; →다른 곳에 저장
  }
  데이터형 변수명;

    class basePlayer{ →12byte(String 4byte*2+int 4byte*1)

    String name; 

    int age;

    String sex;

    static String 구단명; →전역변수: 다른 영역에 저장

  }

 

 2)객체 생성방법: new 사용해서 각각의 객체 생성.

    ***new: 저장크기의 메모리를 확보해 새로운 공간을 생성함.

               String a=null, double b=0.0, int c=0 등으로 멤버변수를 초기화함.

    basePlayer 이정후=new basePlayer( );

    basePlayer 김하성=new basePlayer( );

          ①                    ②                             ③

 

    ①클래스: 사용자 정의 데이터형. 기본 데이터형과 비슷하게 사용(형변환도 있음)

    ②객체: 클래스의 속성과 기능을 지닌 각 개체

    ③생성자: 초기값 부여. 매개변수를 통해 외부에서 값을 불러올 수 있음.

                 ***초기화 방법: default, 명시적 초기화, 초기화 블럭, 생성자

                     -초기화 블럭: 자동처리, File을 읽어서 데이터 저장할 때

                     -생성자: 사용자 입력값을 받을 때

 

                                  클래스를 사람에서 야구선수로 바꿨더니 멤버변수가 엉망...                                                                          name 필요없고 선수 다 남자니까 .sex도 static으로 둬도 될 듯

  3)주소 접근 연산자(참조변수.멤버변수(필드))

     ***참조변수: 객체의 주소를 저장하는 변수

     scan.nextInt( ) :멤버변수의 경우는 객체명

     Math.random( ) : static변수의 경우에는 클래스명

 

 4) 생성자: 메소드명이 클래스명과 동일하고, 리턴 자료형이 없는 메소드.

               인스턴스가 생성될 때 호출되는 인스턴스 초기화 메소드로, 인스턴스 변수의 초기화 작업에 사용.

                ***주의: 인스턴스의 생성은 new의 역할!!

              - 클래스에 생성자가 정의되지 않은 경우 JVM이 자동으로 기본생성자(클래스명( ){ }) 추가.

              - 매개변수가 있는 생성자의 경우 인스턴스 생성 후 별도의 초기화가 필요없기 때문에 유용.

 

 5) 오버로딩: 한 클래스 내에 이름은 같지만 매개변수의 개수나 타입이 다른 경우.

                  매개변수에 의해서만 구분, 리턴값은 전혀 고려되지 않음.

     장점: 근본적으로 같은 기능을 하는 메소드들을 기억하기 쉽고 짧게 명명할 수 있음.  (ex. println)

댓글