25.02.20 (목) 9일차 Java

허배령·2025년 2월 20일

괴발개발 TIL

목록 보기
9/54

OOP

MVC 패턴 - => 애플리케이션의 역할을 세가지로 분리하는 설계 패턴

Model - 프로그램 로직과 관련되어 있는 데이터를 저장하는 용도 + 비즈니스 로직 (DB, 서비스, 객체)
vo( Value Obect) : 값 저장용 객체를 만들기 귀한 클래스를 모아두는 패키지

View - 사용자에게 보여지는 화면 (UI - HTML, JSP, Thymeleaf, React)
Controller - 사용자의 요청을 받고, 모델과 뷰를 연결하는 역할 (응답)

클래스

클래스 선언

예시

public class Member {
	
    private String name;
	private int age;  =========================== 필드


	public Member() {} ========================== 생성자


	public String getName() {
		return name;
	}
	public void setName(String name) { =========== 메서드
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

클래스 접근 제한자

구분같은 패키지 내전체
+ publicOO
~ (default)OX

예)

public class 클래스명 {	
	// .............
    }
    class 클래스명 {
	 // .............
    }

필드 (Field)

  • 객체의 속성을 작성하는 클래스 내부 영역 == 멤버변수
    1) 인스턴스 변수 : 필드에 작성되는 일반 변수
private int age;

2) 클래스 변수 (== static 변수) : 필드에 static 예약어가 작성된 변수

public static String schoolName;

필드 표현식

[접근제한자] [예약어] class 클래스명 {

    [접근제한자] [예약어] 자료형 변수명 [= 초기값];
}
public class Academy { 
	public int temp1;
	protected int temp2;
	int temp3; 		//접근제한자 생략 시 (default)
	private int temp4; 	//캡슐화 원칙으로 private 사용
}

필드 접근제한자

구분해당 클래스 내부같은 패키지 내후손 클래스 내전체
+ publicOOOO
# protectedOOO
~ (default)OO
- privateO
public int v1 = 10;		// 전체에서 접근 가능
protected int v2 = 20;	// 후손클래스 내까지 접근 가능
int v3 = 30; 			// (default) 같은 패키지 내까지 가능
private int v4 = 40;	// 해당 클래스 내부에서만 가능

필드 예약어

  1. static
  • 공유 메모리 영역(또는 정적 메모리 영역) 이라고 함
  • 프로그램 시작 시 static이 붙은 코드들이 모두 static 영역에 생성되고,
    프로그램이 종료될 때까지 사라지지 않음(정적)
  • static 영역에 생성된 변수는 어디서든지 공유 가능
public static String schoolName = "KH고등학교";
  1. final
  • 하나의 값만 계속 저장해야 하는 변수에 사용하는 예약어
  • setter가 굳이 필요 없어 getter만 생성됨
private  int TEMP1 = 100;

생성자 (Constructor)

  • 객체가 new 연산자를 통해 Heap 메모리 영역에 할당될 때
    객체 안에서 만들어지는 필드 초기화 + 생성 시 필요한 기능 수행

  • 생성자는 일종의 메소드로 전달된 초기값을 받아서 객체의 필드에 기록

생성자 규칙

  • 생성자의 선언은 메소드 선언과 유사하나 반환 값이 없으며
    생성자명을 클래스명과 똑같이 지정해주어야 함

생성자 표현식

[접근제한자] [예약어] class 클래스명 {
[접근제한자] 클래스명() { } 
[접근제한자] 클래스명(매개변수) { (this.)필드명 = 매개변수; } 
}
public class Academy {
	private int studentNo;
	private String name;

	public Academy() {} // 기본 생성자
	public Academy(int studentNo, String name) { //매개변수 있는 생성자
		this.studentNo = studentNo;
		this.name = name;
	}
}

기본 생성자

  • 작성하지 않은 경우, 클래스 사용 시 컴파일러가 자동으로 기본 생성자 생성
  • 단축키 : ctrl + spacebar + enter

매개변수 생성자

  • 객체 생성 시 전달받은 값으로 객체를 초기화 하기 위해 사용
  • 매개변수 생성자 작성 시 컴파일러가 기본 생성자를 자동으로 생성해주지 않음
    (직접 만들어 줘야 함)
  • 상속에서 사용 시 반드시 기본 생성자를 작성
  • 오버로딩을 이용하여 작성
  • 단축키 : alt + shift + s -> Generate Constructor Using Fields

오버로딩

  • 한 클래스 내에 동일한 이름의 메소드를 여러 개 작성하는 기법

오버로딩 조건

  • 생성자명, 메서드명 이름이 같아야 한다
  • 매개변수의 자료형, 개수, 순서가 달라야 한다
  • 리턴타입은 같아도 되고, 달라도 된다
  • 매개변수명 신경쓰지 않음
  • 변수명이 달라도 오버로딩 불가조건 중 하나가 충족되면 오버로딩 불가
    ex)
			public User(){}
            
			public User(String userId, String userPw){}

			public User( String userId, String userPw, String userName,
					int userAge, char userGender) {}

==============================================================================
            public User() {} // 기본생성자가 이미 작성되어 있어서 X
			
            public User(String userId) {} // 매개변수의 개수가 같은 생성자 없음
			// -> 오버로딩 성립
			
			public User(int userAge) {} // 매개변수의 개수는 같지만 타입이 다름
			// -> 오버로딩 성립
			
			public User(String userId, int userAge) {}
			// 매개변수의 개수가 동일한 것은 있으나, 하나의 타입이 다름
			// -> 오버로딩 성립
			
			public User(int userAge, String userId) {}
			// 매개변수의 개수와 타입이 동일하지만, 순서가 다름
			
			public User(int userAge, String userName) {}
			// 위 매개변수의 개수, 타입, 순서 모두 같아서 불가
			// -> 변수명은 신경쓰지 않는다

toString() 메서드

  • toString() 메서드 : Object 최상위 클래스
    이미 만들어져있는 메서드 객체가 문자열로 변환될 때 호출되는 메서드
    -> 보통 객체의 필드값을 출력하는 용도로 오버라이딩해서 사용함.
@Override // @ (어노테이션) : 컴파일러 인식용 주석
public String toString() {
	return "User [userId=" + userId + ", userPw=" + userPw + ", userName=" + userName + ", userAge=" + userAge
			+ ", userGender=" + userGender + "]";
  • Override : 메서드가 부모 클래스의 메서드를 "정확히" 재정의(오버라이딩) 검사
  • 만약에 오타가 있거나, 부모 클래스에 없는 메서드를 잘못 작성했을 경우 컴파일 오류 발생
  • 이 메서드가 부모 클래스를 재정의 했다는 것을 한눈에 알 수 있음
  • 단축키 : alt + shift + s -> Generate toString()

this

  • 모든 인스턴스의 메소드에 숨겨진 채 존재하는 레퍼런스로, 할당된 객체를 가리킴
    함수 실행 시 전달되는 객체의 주소를 자동으로 받음
		this.userId = userId;
		this.userPw = userPw;
	//     ㄴ 필드  =  ㄴ 매개변수

this 사용 예시

public class Academy{
	    private String name;
	    public Academy() { }
	    public Academy(String name) { this.name = name;  }
    }
  • 위와 같이 매개변수를 가지는 생성자에서 매개변수 명이 필드명과 같은 경우
    매개변수의 변수명이 우선이므로 this 객체를 이용하여 대입되는 변수가 필드라는 것을 구분해줌

this() : this 생성자

  • 같은 클래스의 다른 생성자를 호출할 때 사용
  • 생성자 내에서 반드시 첫번째 줄에 작성!
  • 장점 : 중복 코드 제거, 코드길이 감소, 재사용성 증가
  • 단점 : 가독성이 떨어짐

this() 사용예시

public class Academy{
	    private int age;
	    private String name;
	    public Academy() { this(20, “김철수”); }
	    public Academy(int age, String name) {
		    this.age = age;     this.name = name;  
	    }
   } 
profile
인생은 변수

0개의 댓글