Sinbum's blog
  • 인셉션 개발자
    • History
    • Editorial Board
    • 세미나
      • MS_빅데이터_분석_교육
      • Databricks_Musinsa_사례분석
      • Databricks_AMOREPACIFIC_사례분석
    • 개발자 꿀팁
  • 리눅스
    • 리눅스 기초
      • 기본명령어
      • 프록시서버
      • 온프레미스
      • systemd
      • 우분투 앱
      • vi 사용법
    • 도커
      • MSA 아키텍처
      • 도커 설명
      • 도커 설치
      • 도커 가이드
        • 컨테이너 만들기
        • 컨테이너 보관
        • 컨테이너 사용
        • 컨테이너 관리
        • 컨테이너 볼륨
        • 컨테이너 통신
        • 도커 연습
  • 언어
    • 자바
      • 자바(JAVA)는 무엇인가?
        • JVM 메모리
      • 자바 설치 가이드
      • 자바 언어 활용
        • 변수
        • static
        • 상수
        • 연산자
        • 제어문
        • 배열
        • CLI-자바사용
        • 클래스
        • 메소드
        • 값에의한 호출
        • GUI 프레임
        • 생성자
        • 오버로딩
        • 상속
        • 상속생성자
        • 접근제한자 와 가비지 컬렉션
        • 추상클래스 와 인터페이스
        • 다중구현
        • 예외처리
        • 컬렉션 프레임워크
        • 쓰레드
        • 네트워크
        • 다중 접속 서버 구현
      • 간단한 채팅 앱 개발하기
    • 파이썬
      • 파이썬(Python)은 무엇인가?
      • 파이썬 설치 가이드
      • 파이썬 언어 활용
        • 변수
        • 입력,출력
        • 타입선언
        • 자료구조
        • 주석처리
        • 문자열
        • 리스트
        • 반복문
        • 연산자
        • 조건문
        • 정규표현식
          • re 모듈
          • 메타문자1
          • 메타문자2
          • 그루핑
          • 전방탐색
          • 문자열 바꾸기
          • Greedy 와 Non-Greedy
      • 마치며...
  • 형상관리,CI/CD
    • 깃허브
      • 깃허브 협업 모델
      • 깃허브 설치 와 ssl
      • 깃허브를 잘쓰는 팁 모음
  • BigData
    • BigData 개념
      • OLTP,OLAP
      • ELT,ETL
      • DW
      • ObjectStorage
      • LambdaArc
      • OGG
    • Kafka
      • 환경설정 및 소스코드 다운로드
      • 아파치 카프카는?
        • 카프카의 시작
        • 카프카 특성
        • 빅데이터 아키텍처
      • 카프카 기초 개념
    • BuildApplications
      • Airflow
      • Grafana
    • PowerBi
      • DAX
        • REMOVEFILTERS
        • DAX_문법
        • DAX_함수
    • Azure
      • SynapseAnalytics
  • IOT
    • 아두이노
      • 설치 및 기초
      • 센서의 종류
      • led 출력하기
      • 시리얼 통신
      • 무선 통신
  • About
    • SINBUM
    • INTEREST
    • PROJECTS
      • 업무 프로젝트
      • 개인 프로젝트
        • 티스토리API를 사용한 블로그 앱
        • 노션 API와 블로그 연동 자동화 하기
        • 로지텍 마우스 수리
    • CONTACT
Powered by GitBook
On this page
  • 기본 생성자가 생략되어 있는 경우
  • 기본생성자를 선언한 경우
  • 기본생성자를 선언해야 하는 경우
  • 생성자에 대한 개념 부가 설명(중요)
  1. 언어
  2. 자바
  3. 자바 언어 활용

생성자

  • return Type이 없습니다.

  • 클래스 이름과 같아야 합니다.(대소문자 구별)

  • new를 이용하여 객체를 메모리에 할당한 후 할당된 메모리를 특정 값으로 초기화하는 역활을 합니다.

기본 생성자가 생략되어 있는 경우

SchoolMain2.java

class School2{
int kuk = 0;
int eng = 0;
int tot = 0;


public int hap(){
    tot = kuk+eng;

    return tot;
}


}

SchoolMain2.java

public class SchoolMain2 {
    public static void main(String[] args) {
        School2 sc2 = new School2();
        sc2.kuk=90;
        sc2.eng=100;
        System.out.println("hap: " + sc2.hap());
    }
}

기본생성자를 선언한 경우

  • 생성자에 초기화하는 변수가 없어도 반드시 생성자를 선언할 것을 권장합니다.

  • 상속 관계에 들어가면 이 기본 생성자가 선언되지 않으면 상황에 따라 에러를 발생합니다.

School3.java

class School3{
int kuk = 0;
int eng = 0;
int tot = 0;


public School3(){

}

public int hap(){
    tot = kuk+eng;

    return tot;
}


}

SchoolMain3.java

public class SchoolMain3 {

public static void main(String[] args) {
    School3 sc3 = new School3();
    sc3.kuk=90;
    sc3.eng=100;
    System.out.println("hap: " + sc3.hap());
}


}

기본생성자를 선언해야 하는 경우

  • 인수를 받는 생성자가 존재하게되면 반드시 기본 생성자를 선언해야 합니다.

  • 기본 생성자는 하는 일이 없어도 반드시 선언을 적극 권장합니다.

School4.java

class School4{
int kuk = 0;
int eng = 0;
int tot = 0;

//기본 생성자
public School4(){ }

//아래처럼 인수를 받는 생성자가 존재하면
//반드시 기본 생성자를 명시적으로 선언해야 합니다.
public School4(int kuk, int eng){
    this.kuk = kuk;
    this.eng = eng;
}

public int hap(){
    tot = kuk+eng;

    return tot;
}

}

SchoolMain4.java

public class SchoolMain4 {

public static void main(String[] args) {
    School4 sc4 = new School4();
    sc4.kuk=90;
    sc4.eng=100;
    System.out.println("hap: " + sc4.hap());

    School4 sc = new School4(90, 100);
    System.out.println("hap: " + sc.hap());
}


}

생성자에 대한 개념 부가 설명(중요)

자바에서의 생성자

  1. 기본생성자를 이용하여 학생을 만들고보니 학생클래스 내부의 성적과 학생정보에 대한 클래스가 존재합니다. 그런데 이 클래스를 활용할 수 없습니다. Student student=new Student( );

  2. 생성자 중 객체를 전달하는 생성자가 있습니다. 그런데 문제는 이 객체를 생성하고 객체전달을 해야 사용이 가능 합니다. Student student=new Student(sungjuk, studentinfo);

  3. 성적과 학생정보 객체를 생성 그리고 학생 객체 생성자함수에 전달을 해주었지만 문제가 발생헀습니다. 문제는 다음과 같습니다. Sungjuk sungjuk=new Sungjuk( ); StudentInfo studentinfo=new StudentInfo( ); Student student=new Student(sungjuk, studentinfo);

    • 성적 정보 부재

    • 학생 정보 부재

  4. 성적정보를 입력하는 생성자 함수를 찾았고 Sungjuk sungjuk=new Sungjuk(subject);

  5. 학생정보를 입력하는 생성자 함수를 찾았습니다. StudentInfo studentinfo=new StudentInfo(1,"김하나","010-1111-1111"); 그러나 성적정보는 subject 라는 클래스로 이루어져 있습니다.

  6. subject 라는 객체를 생성하고 점수를 전달합니다. Subject subject=new Subject(80,80,80); Sungjuk sungjuk=new Sungjuk(subject);


해결된 예시는 다음과 같습니다.

Subject subject=new Subject(80,80,80);  
Sungjuk sungjuk=new Sungjuk(subject);  

StudentInfo studentinfo=new StudentInfo(1,"김하나","010-1111-1111");  
student[0]=new Student(sungjuk, studentinfo);  

System.out.println(student[0].sungjuk.total);  
System.out.println(student[0].sungjuk.avg);  

즉 위 사례를 통한 트러블슈팅은 다음과 같습니다.

  1. 각 클래스의 값 조회는 가능하나 활용이 불가능했다.

  2. 각 클래스를 따로 생성하여 한 로직에서 모든 정보를 대입하고,

  3. 대입한 클래스를 하나의 학생객체에 담아 주었습니다. 즉 객체가 객체를 담은 것입니다.

  4. 정리하면 생성자를통해 새로운클래스를 생성하였지만 대입한 인자값 또한 생성자로 생성된 객체로 주입을 한 것입니다.

PreviousGUI 프레임Next오버로딩

Last updated 2 years ago