java 기초 - 02

hanjae_99·2023년 1월 13일
0

Learned by 창

목록 보기
2/8

2일차 수업

이번 시간에도 지난번에 이어 java에 대해 배워보았다.

클래스를 만들고 해당 클래스의 필드 생성해보기, 생성자 만들기, 클래스의 메소드 작성해보기,
부모클래스 -> 자식클래스인 상속에 대해 이해하기 등
이번에 배운 지식들도 정리해보는 시간을 갖자!

  • 클래스, 필드, 생성자란?
  • 클래스(class)는 여러개의 필드, 생성자, 메소드가 모인 하나의 큰 개념이라고 볼 수 있다.

    예를들어 '사람' 이라는 클래스가 있다면
    그 '사람' 이라는 게 갖는 특징(이름, 나이, 성별..)을 필드라 할 수 있고,
    그러한 특징들의 형식을 정해주는(이름은 홍길동 처럼, 나이는 23 처럼, 성별은 남자 처럼..)것을 생성자,
    그리고 '사람' 클래스가 할 수 있는 행동들(이름 확인, 나이 확인..)을 메소드라고 생각할 수 있다.

    public class Saram {
    	// 필드 작성하기
    	String name;
    	int age;
    	String attribute;
    	
    	// 생성자 만들기
    	public Saram(String name, int age, String attribute) {
    		this.name = name;
    		this.age = age;
    		this.attribute = attribute;
    	}
    	//메소드 만들기
    	public String getName() { 
    		return this.name; // 해당 객체의 이름을 메인함수로 보냄
    	}
    	
    	public void setName(String name) {
    		this.name = name; // 받은 인자(이름)을 새로운 이 객체의 이름으로 함
    	}
    
    	public void iamWho() {
    		System.out.println("나는" + this.name + "입니다.");
    	}
    }

    이렇게 '사람' 이라는 클래스에 특징들을 부여했다면 '홍길동' 이라는 객체를 만들어 getName, setName 메소드를 활용해보자

    	public static void main(String[] args) {
    		Saram kildong = new Saram("홍길동", 23, "학생"); // kildong 을 새로운 '사람' 클래스로 지정, 각 특성들 값 입력
    		System.out.println(kildong.getName()); // "홍길동" 출력
    		
    		kildong.setName("김철수"); // 이름 홍길동 -> 김철수로 변경
    		System.out.println(kildong.getName()); // 바뀐 이름인 "김철수" 가 출력됨
    	}

    클래스를 이루는 각 구성요소들에 대해서 살펴보았다.
    하나의 클래스안에 여러개의 필드가 존재할 수도 있으며, 여러개의 생성자(클래스 오버로딩)가 존재할 수도 있다.
    그리고 만약 생성자를 만들 때 이름, 나이, 성별 등 인자를 받지 않는 기본 생성자를 만들 수도 있는데
    말 그대로 빈 껍데기라 getName 으로 이름을 불러올 시 null 값이 출력된다.

    	public Saram() { // 이름, 나이, 특징등 디폴트값 안주기 -> 이름 호출 시 null 출력 , 이러한 기본생성자가 있어야 상속가능
    
    	}
    
    	public static void main(String[] args) {
    		Saram mola = new Saram(); // 인자가 없는 클래스 생성
    		System.out.println(mola.getName()); // null 출력
    	}

    이러한 기본 생성자가 있어야 뒤에서 나올 클래스 '상속' 을 활용할 수 있다.

  • 클래스 상속
  • 어떤 한 클래스의 필드, 생성자, 메소드 등등 많은 작업을 거치고 나니
    해당 클래스에 또하나의 필드 (특징)을 추가하고싶어질 수도 있다.
    예를 들어 '사람' 에 'mbti' 라는 특성을 추가하려면 어떻게 해야할까?
    이미 작성한 필드랑 생성자들을 건드리는것보다 새로이 특성인 클래스를 만들어서
    이전에 만들어놓은 클래스랑 부모 - 자식 간으로 연결시켜 이전 클래스의 메소드까지 활용할 수 있는데
    그걸 클래스 상속이라 한다.

    새로운 클래스 파일(MBTI)을 하나 만들고 상속시켜보자

    public class MBTI extends Saram { // Saram -> MBTI로 클래스 상속하기 (**부모 클래스에 인자가 없는 기본 생성자가 있어야 함!**)
    	
    	String mbti; // 상속받는 클래스도 필드 설정해주기
    	
    	// MBTI 객체 생성, 부모클래스의 생성자도 포함해서 작성해주어야함
    	public MBTI(String name, int age, String attribute, String mbti) { 
    		this.name = name;
    		this.age = age;
    		this.attribute = attribute;
    		this.mbti = mbti;
    	}
    	
    	// 자식 클래스(MBTI)의 고유 메소드
    	public String getMbti() {
    		return this.mbti;
    	}
    	
    	public void setMbti(String mbti) {
    		this.mbti = mbti;
    	}
    	
    	@Override // Override : 부모 클래스의 메소드를 자식 클래스에서 재정의(다르게 쓰는것)
    	public void iamWho() {
    		System.out.println("나는" + this.mbti + "입니다.");
    	}
    	
    	public static void main(String[] args) {
    		MBTI kildong = new MBTI("홍길동", 23, "학생", "ENFP"); // kildong 이라는 새로운 MBTI 객체 생성
    		System.out.println(kildong.getName()); // 부모 클래스의 메소드도 가져옴 -> "홍길동" 정상적으로 출력
    		System.out.println(kildong.getMbti()); // 자식 클래스의 메소드 -> "ENFP" 정상적으로 출력
    		
    		kildong.iamWho(); // "나는 ENFP 입니다" 출력
    	}
    
    }

    MBTI 라는 자식클래스를 생성하여 부모클래스인 Saram 과 extends 로 연동시켜(상속시켜)주고
    마찬가지로 MBTI 자식클래스도 필드, 생성자를 만들어 준다. 이때 부모클래스의 생성자도 포함시켜서 작성해주면 된다.

    부모클래스의 고유메소드를 자식클래스에서 변형시켜 쓰고싶을때 @Override 라고 표현하며 메소드의 이름은 같지만 내용이 틀리다.

    마지막 메인함수부분에서 보면 자식클래스에선 getName 메소드가 없지만 부모클래스의 getName 메소드를 불러와 정상적으로
    이름이 출력되는것을 확인할 수 있는데, 이렇듯 상속받은 클래스는 부모클래스의 메소드도 활용할 수 있다.

    마무리

    오늘은 어떻게 보면 java 에서 가장 중요하다고하는 class 와 필드, 생성자, 메소드에 대해서 배웠고
    그 심화로 상속 클래스에 대해서도 배웠다.

    기존에 파이썬으로 먼저 코딩공부를 접해서 그런가 class 라는 개념이 마냥 생소했었는데, 오늘 배운 내용이
    그간 어렴풋이 헤매던 개념을 조금이나마 뚫어준것같다

    profile
    단 하나밖에 없는 톱니바퀴

    0개의 댓글