📖
Kyu9's Repo
  • Library of mameil
  • 이슈 경험
    • 20230220_트랜잭션
    • 20230306_캐싱이슈
    • 20230722_테스트코드에서 @Transactional
    • 20230807_deadlock
  • 인턴 스터디
    • Gradle
    • Stream, Optional, 람다식
    • JVM의 메모리 구조, Garbage Collector
    • RESTful API
    • Microservice Architecture
    • HTTP
    • 웹서버란 무엇인가
    • Git Branch
    • TDD
    • Redis을 이용한 캐시
    • Thymeleaf
    • 정리가 필요한 자료들
    • SpringBoot Management
    • 테스크 코드 분할
  • 동아리 스터디
    • 기본 SQL 공부
      • SQL의 기본 개념
      • SELECT 문장을 이용하여 원하는 데이터 출력하기
        • 집합 연산자 사용하기
        • where절에 비교 연산자를 사용해보기
        • SELECT_EX
        • 산술 연산자 사용해보기
      • 단일 행 함수 사용
        • lower/upper 함수 사용하기
        • length함수 사용하기
        • concat함수 사용
        • substr/mid/substring 함수 사용
        • instr함수 사용하기
        • lpad/rpad 함수 사용하기
        • trim/ltrim/rtrim 함수 사용하기
        • replace 함수 사용하기
        • round 함수 사용하기
        • truncate 함수 사용하기
        • mod함수 사용하기
        • ceil함수 사용하기
        • floor함수 사용하기
        • power 함수 사용하기
        • Date fn(날짜 함수)
        • 형 변환 함수
        • 일반함수란
    • a-ha 실습
    • 혼자서 만들어본 게시판
    • AWS 강의
  • 학교 나머지 공부 자료
    • 웹프레임워크(Spring)
      • Spring이란?
      • Webframework1-1
      • Webframework1-2
      • SpringBoot의 특징
      • SpringBoot 생성 방법
      • Spring Data JPA
      • SpringBoot Security
      • SpringBoot HATEOAS
  • 공부 자료들
  • WS 온라인 자바 스터디
    • Week1(JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.)
    • Week2(자바 데이터 타입, 변수 그리고 배열)
    • Week3(연산자)
    • Week4(제어문)
    • Week5(클래스)
    • Week6(상속)
    • Week7(패키지)
    • Week8(인터페이스)
    • Week9(예외처리)
    • Week10(멀티쓰레드 프로그래밍)
    • Week11(Enum)
    • Week12(Annotation)
    • Week13(I/O)
    • Week14(Generic)
    • Week15(람다식)
  • 백준문제
    • 입출력과 사칙연산
      • We love kriii(10718)
      • 고양이(10171)
      • 개(10172)
      • A+B(1000)
      • A-B(1001)
      • AxB(10998)
      • A/B(1008)
      • 사칙연산(10869)
      • 나머지(10430)
      • 곱셈(2588)
    • for문
      • 구구단(2739)
      • A+B - 3(10950)
      • 합(8393)
      • 빠른 A+B(15552)
      • N 찍기(2741)
      • 기찍 N(2742)
      • A+B - 7(11021)
      • A+B - 8(11022)
      • 별 찍기 - 1(2438)
      • 별 찍기 - 2(2439)
      • X보다 작은 수(10871)
    • if문
      • 두 수 비교하기(1330)
      • 시험 성적(9498)
      • 윤년(2753)
      • 사분면 고르기(14681)
      • 알람 시계(2884)
      • 오븐 시계(2525)
      • 주사위 세개(2480)
      • 영수증(25304)
    • While문
      • A+B - 5(10952)
      • A+B - 4(10951)
      • 더하기 사이클(1110)
    • 1차원 배열
      • 최소, 최대(10818)
      • 최댓값(2562)
      • 숫자의 개수(2577)
      • 나머지(3052)
      • 평균(1546)
      • OX퀴즈(8958)
      • 평균은 넘겠지(4344)
    • 함수
      • 정수N개의 합(15596)
      • 셀프 넘버(4673)
      • 한수(1065)
    • 문자열
      • 아스키코드(11654)
      • 숫자의 합(11720)
      • 알파벳 찾기(10809)
      • 문자열 반복(2675)
      • 단어 공부(1157)
      • 단어의 개수(1152)
      • 상수(2908)
      • 다이얼(5622)
      • 크로아티아 알파벳(2941)
      • 그룹 단어 체커(1316)
    • 기본수학-1
      • 손익분기점(1712)
      • 벌집(2292)
      • 분수찾기(1193)
      • 달팽이는 올라가고 싶다(2869)
      • ACM 호텔(10250)
      • 부녀회장이 될테야(2775)
      • 설탕 배달(2839)
      • 큰 수 A+B(10757)
      • Fly me to the Alpha Centauri(1011)
    • 기본수학-2
      • 소수 찾기(1978)
      • 소수(2581)
      • 소인수분해(11653)
      • 소수 구하기(1929)
      • 베르트와 공존(4948)
    • 재귀
      • 하노이 탑 이동 순서(11729)
      • 피보나치 수 5(10870)
      • 별 찍기(2447)
    • 브루트 포스
      • 블랙잭(2798)
      • 분해합(2231)
      • 덩치(7568)
      • 체스판 다시 칠하기(1018)
      • 영화감독 슘(1436)
    • 집합과 맵
      • 숫자 카드(10815)
      • 문자열 집합(14425)
      • 숫자 카드2(10816)
      • 듣보잡(1764)
      • 대칭 차집합(1269)
      • 서로 다른 부분 문자열 갯수(11478)
    • 정렬
      • 수 정렬하기(2750)
      • 수 정렬하기 2(2751)
      • 수 정렬하기 3(10989)
      • 통계학(2108)
      • 소트인사이드(1427)
      • 좌표 정렬하기(11650)
      • 좌표 정렬하기2(11651)
      • 단어 정렬(1181)
      • 나이순 정렬(10814)
      • 커트라인(25305)
      • 좌표압축(18870)
    • 백트래킹
      • N과 M - 1(15649)
      • N과 M - 2(15650)
      • N과 M - 3(15651)
      • N과 M - 4(15652)
      • N-Queen(9663)
      • 스도쿠(2580)
      • 연산자 끼워넣기(14888)
      • 스타트와 링크(14889)
    • 이분 탐색
      • 수 찾기(1920)
    • 동적계획법
      • 피보나치 함수(1003)
      • 신나는 함수 실행(9184)
      • 01타일(1904)
      • 파도반 수열(9461)
      • RGB거리(1149)
      • 정수 삼각형(1932)
      • 계단 오르기(2579)
      • 1로 만들기(1463)
      • 쉬운 계단 수(10844)
      • 포도주 시식(2156)
      • 가장 긴 증가하는 부분 수열(11053)
      • 가장 긴 바이토닉 부분 수열(11504)
      • 전깃줄(2565)
      • LCS(9251)
      • 연속합(1912)
      • 평범한 배낭(12865)
      • 더하기(9095)
    • DFS와 BFS
      • 미로탐색(2178)
      • 바이러스(2606)
      • DFS와 BFS(1260)
      • 단지번호붙이기(2667)
      • 전쟁 - 전투(1303)
      • 숨바꼭질(1697)
      • 데스 나이트(16948)
      • 나이트의 이동(7562)
      • 녹색 옷 입은 애가 젤다지?(4485)
      • 음식물 피하기(1743)
      • A->B (16953)
      • 숨바꼭질 3(13549)
      • 숨바꼭질 2(12851)
    • 구현
      • 치즈(2636)
  • 프로그래머스 문제
    • SQL
      • Animal Table - Oracle
      • Animal Table - MySQL
      • Animal Table2 - Oracle
      • Animal Table 3,4 - Oracle
    • Lv1
      • 두 개 뽑아서 더하기
      • 제일 작은 수 제거하기
      • 문자열 내 p와 y의 개수
      • 예산
      • 자릿수 더하기
      • 두 정수 사이의 합
      • 같은 숫자는 싫어
      • 가운데 글자 가져오기
      • 수박수박수박수박수박수?
      • 나누어 떨어지는 숫자 배열
      • 2016년
      • 폰캣몬
      • 서울에서 김서방 찾기
      • 문자열을 정수로 바꾸기
      • 소수 만들기
      • 문자열 다루기 기본
      • 소수 찾기(에라토스테네스의 체)
      • 숫자 문자열과 영단어
      • 이상한 문자 만들기
      • 없는 숫자 더하기
      • 문자열 내림차순으로 배치하기
      • 문자열 내 마음대로 정렬하기
      • 약수의 개수와 덧셈
      • 콜라츠 추측
      • 자연수 뒤집어 배열로 만들기
      • 신규 아이디 추천
      • 비밀지도
      • 크레인 인형뽑기 게임
      • 실패율
      • 로또의 최고 순위와 최저 순위
      • 키패드 누르기
      • 정수 내림차순으로 배치하기
    • Lv2
      • 행렬의 곱셈
      • 영어 끝말잇기
      • 영어 끝말잇기
      • N개의 최소 공배수
      • 피보나치 수
      • 124 나라의 숫자
      • 짝지어 제거하기
      • 프린터
      • 다음 큰 숫자
      • 최댓값과 최솟값
      • 최소값 만들기
      • 숫자의 표현
      • JadenCase 문자열 만들기
      • 오픈채팅방
      • 영어 끝말잇기
      • 멀쩡한 사각형
      • 올바른 괄호
      • 위장
      • 기능개발
      • 더 맵게
      • 스킬트리
    • 완전탐색
      • 모의고사(Lv1)
      • 카펫(Lv2)
      • 소수 찾기(Lv2)
    • 정렬(Sorting)
      • K번째 수(Lv1)
      • 가장 큰 수(Lv2)
      • H-Index(Lv2)
    • 해시(Hash)
      • 완주하지 못한 선수(Lv1)
      • 전화번호 목록(Lv2)
    • 탐욕법(Greedy)
      • 체육복(Lv1)
      • 큰 수 만들기(Lv2)
      • 구명보트(Lv2)
    • 동적계획법(DP)
      • 정수 삼각형(Lv3)
    • 깊이/너비 우선 탐색(DFS/BFS)
      • 타겟 넘버(Lv2)
      • 네트워크(Lv3)
      • 단어 변환(Lv3)
  • 스프링부트 책
    • Day 1
    • Day 2
    • Day 3
    • Day 4
    • Day 5
    • Day 6
    • Day 7
    • Day 8
    • Day 9
    • Day 10
    • Day 11
    • Day 12
    • Day 13
    • Day 14
    • Day 15
    • Day 16
    • Day 17
  • JPA 책
    • 프로젝트 세팅 및 기본설정
    • 영속성 관리 개념
    • 엔티티 매핑
      • 실습 예제
    • 연관관계 매핑 기초
      • 실습 예제
    • 다양한 연관관계 매핑
      • 다대일, 일대다 관계
      • 일대일, 다대다 관계
      • 실습 예제
    • 고급 매핑
      • 상속 관계 매핑
      • @MappedSuperclass
      • 복합 키와 식별 관계 매핑
      • 조인 테이블
    • 프록시와 연관관계 관리
      • 프록시
      • 즉시 로딩과 지연 로딩
      • 영속성 전이, 고아 객체
    • 값 타입
      • 임베디드 타입
      • 값 타입과 불변 객체
      • 값 타입의 비교, 컬렉션
    • 객체지향 쿼리 언어
      • JPQL part1
      • JPQL part2
      • JPQL part3
      • QueryDSL
      • NativeSQL
      • 객체지향 쿼리 심화
    • 응용 애플리케이션
      • 엔티티 설정
    • 스프링 데이터 JPA
      • 공통 인터페이스
  • Kotlin In Action
    • 코틀린의 특징
    • 코틀린의 기초
    • 함수 정의와 호출
    • 클래스, 객체, 인터페이스
    • 람다 방식
    • 코틀린 타입 시스템
    • 연산자 오버로딩과 기타 관례
    • 고차함수
    • 제네릭스
    • 애노테이션과 리플렉션
    • 코루틴
  • Oracle
    • Oracle 기본
    • Oracle 심화
  • SQL_연습
    • Revising the Select Query
    • Basic Select
    • Advanced Select
    • Basic Select 2
  • SQL 첫걸음(책)
    • Day 1
    • Day 2
    • Day 3
    • Day 4
    • Day 5
    • Day 6
    • Day 7
    • Day 8
    • Day 9
    • Day 10
    • Day 11
    • Day 12
    • Day 13
    • Day 14
    • Day 15
    • Day 16
    • Day 17
    • Day 18
    • Day 19
    • Day 20
    • Day 21
    • Day 22
    • Day 23
    • Day 24
    • Day 25
    • Day 26
    • Day 27
    • Day 28
    • Day 29
    • Day 30
  • 더 자바 코드를 조작하는 다양한 방법
    • JVM 이해하기
    • 바이트코드 조작
    • 리플렉션
    • 다이나믹 프록시
    • 애노테이션 프로세서
  • 더 자바, 애플리케이션을 테스트하는 다양한 방법
    • JUnit5
    • Mockito
    • 도커와 테스트
    • 성능, 운영이슈, 아키텍처 테스트
  • 이펙티브 자바
    • item1 - 생성자 대신 정적 팩토리 메소드를 고려하라
    • item2 - 생성자에 매개변수가 많다면 빌더를 고려하라
    • item3 - 생성자나 열거타입으로 싱글턴임을 보증하라
    • item4 - 인스턴스화를 막기 위해선 private 생성자를 사용하라
    • item5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
    • item6 - 불필요한 객체 생성을 피하라
    • item7 - 다 쓴 객체 참조를 해제하라
    • item8 - finalizer와 cleaner 사용을 피하라
    • item9 - try-finally 보다 try-with-resources을 사용하라
    • item10 - equals는 일반 규약을 지켜 재정의하라
    • item11 - equals을 재정의하려면 hashCode도 재정의하라
    • item12 - toString을 항상 재정의하라
    • item13 - clone 재정의는 주의해서 진행하라
    • item14 - Comparable을 구현할지 고민하라
  • Elastic Search
    • 강의 Summary
    • Elastic Summary 개념 정리
    • Elastic Summary 적용 정리
  • 토비의 스프링 강의
    • 스프링부트 살펴보기
    • 독립 실행형 서블릿 애플리케이션
  • k8s
    • minikube 설치
    • jenkins 추가
  • Article
    • Choosing the Right MessageBroker
Powered by GitBook
On this page
  • 클래스란?
  • 객체를 만드는 방법
  • 메소드 정의하는 방법
  • 생성자 정의하는 방법
  • this 키워드 이해하기

Was this helpful?

  1. WS 온라인 자바 스터디

Week5(클래스)

클래스란?

  • 객체를 만들어내기 위한 설계도 혹은 틀

  • 객체를 생성하는데 사용된다.

    • 여기서 객체란 클래스의 모양대로 동일한 속성을 가지고 만들어지지만, 자신만의 고유한 값을 가짐으로써 구분될 수 있다.

  • 구성

    • 클래스선언

      • class 키워드와 클래스이름을 선언하고 중괄호안에 필드와 메소드를 작성(캡슐화의 원칙을 준수)

      • 클래스 생성시, 소스파일과 클래스의 이름이 같아야하고, 첫 글자는 대문자로 쓴다

    • 접근 한정자

      • public : 모든 클래스에서 접근 가능

      • default : 오직 같은 패키지의 클래스에서만 접근 가능

      • final : 하위 클래스를 가질 수 없고 새로운 클래스가 상속되어 생성불가능

      • abstract : 추상 클래스의 선언, 추상 클래스는 객체를 생성할 수 없는 클래스

      • synchronized : 스레드를 동기화 할 필요가 있을떄 사용

    • 필드와 메소드

      • 필드 : 객체 내에 값을 저장할 멤버 변수

        • 접근지정자 자료형 변수이름

      • 메소드 : 아래에서 자세히

      • 클래스의 필드와 메소드를 가져오기 위해서는 클래스명.(필드or메소드)

    • 생성자

      • 클래스의 이름과 동일한 메소드

      • 객체가 생성될 때 자동으로 호출되는 메소드

  • //접근권한 클래스선언 클래스이름
    public class Circle{
           //radius와 name은 필드
        public int radius;
        public String name;
        //Circle이라는 클래스의 생성자
        public Circle(){
    
        }
        //Circle이라는 클래스의 메소드
        public double getArea(){
            return 3.14 * radius * radius;    
        }
    }

객체를 만드는 방법

  • 자바에서는 반드시 new 연산자를 사용하여 객체를 생성해준다.

  • 객체를 선언을 한 이후에 new키워드를 사용해서 객체를 생성해주면 된다.

//클래스면 객체변수명;  이렇게 객체를 생성해줌
Circle pizza;
//객체변수명 = new 클래스명(); 객체의 주소를 참조변수에 저장
pizza = new Circle();
  • new 연산자에 의해서 객체가 생성되는 과정

    • Circle타입 크기의 메모리 할당

    • Circle() 생성자 코드 실행(클래스 생성시 생성자 자동실행)

메소드 정의하는 방법

메소드란 특정 작업을 수행하기 위한 명령문의 집합

함수이고, 객체의 행동을 구현함

하나의 메소드는 하나의 기능만 수행하도록 설계하는 것이 좋음

반복되거나 관련된 코드들을 메소드로 구현해두면 좋다

형태 : 접근지정자 리턴타입 메소드이름

  • 접근 지정자

    • 필드나 메소드에 붙게되는 접근할 수 있는 수준이다.

    • public, protected, default, private이 존재한다

      • public은 클래스내부, 동일패키지, 하위클래스, 그 밖의 영역에서 사용가능

      • protected는 클래스내부, 동일패키지, 하위클래스에서 사용가능

      • default는 따로 지정해주지 않는 경우이고 클래스내부, 동일패키지에서 사용가능

      • private은 클래스 내부에서만 사용가능

  • 리턴타입

    • 메소드는 return문이 존재하고 return되는 값의 형태를 선언해주는 과정이다

    • 만약 return이 없었으면 void타입을 지정해주게된다

//접근지정자, 리턴타입, 메소드이름 으로 선언해주고
int radius=3;
int count=0;
//메소드는 하나의 기능을 하도록 설계
public double getArea(){
    //메소드의 리턴되는 값이 double이기 때문에 메소드의 리턴타입을 double로 선언
    return 3.14*radius*radius;
}
public void pplus(){
    //만약 return해주는 값이 없다면 void타입을 사용해준다
    count++;
}

생성자 정의하는 방법

생성자는 객체가 생성될 떄 객체의 초기화를 위해서 실행되는 메소드임

생성자는 객체가 생성될때 자동으로 호출

이름은 해당 클래스의 이름과 같아야 하며, 리턴값이 없어야한다

만약 따로 정의하지 않는다면 컴파일러가 자동으로 기본생성자를 생성해준다

//기본생성자
class Circle{
    //기본생성자는 매개변수가 없고 아무런 기능도 없이 단순 리턴
    public Circle() { }
}

생성자는 여러개 작성(오버로딩)할 수 있다

  • 매개변수의 개수와 타입이 다르면 그만큼 생성자를 생성할 수 있다.

생성자는 new키워드를 통해서 객체를 생성할 떄 한 번 호출된다.

public class Book{
    String title;
    String author;
    //하나의 인자를 가진 생성자, 클래스 이름과 동일한 생성자
    public Book(String t){
        title = t;
        author = "작가";
    }
    //두개의 인자를 가진 생성자
    public Book(String t, String a){
        title = t;
        author = a;
    }
    //위에 생성자가 2개나 이미 선언되어있기 때문에 main함수에서 new로 객체를 생성할때 기본 생성자를 생성하지 않는다
    public static void main(String [] args){
        Book littlePrince = new Book("어린왕자", "생택쥐페리");
        Book loveStory = new Book("춘향전");
        System.out.println(littlePrince.title + " "+littlePrince.author);
        System.out.println(loveStory.title +" "+loveStroy.author);

    }
}

this 키워드 이해하기

this는 현재 객체 자신에 대한 레퍼런스이다 / 현재 실행되고 있는 메소드가 속한 객체에 대한 레퍼런스이다.

인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어있다.

public class Circle{
    int radius;
    //여기서 this는 현재 객체에 대한 래퍼런스이기 때문에 현재 객체의 맴버인 radius에 접근한다
    public Circle(int r){this.radius = r;}
  //
    public int getRadius(){return radius;}
}

this의 필요성 : 매개변수의 이름은 그 자체로써 코드를 읽는 사람에게 용도를 나타낸다. 그래서 적합한 이름이 필요하게 되는데 만약 위의 코드에서

public Circle(int radius)이렇게 매개변수가 r대신 radius가 들어오게 되면
간단하게 보면 public Circle(int radius){radius = radius}가 된다.

이렇게 매개변수의 이름을 멤버 변수와 같은 이름으로 붙힐려는 경우가 있는데 이럴때 this가 유용하게 사용될 수 있다.

추가로 메소드에서 자기 자신를 리턴해야하는 경우에도 유용되게 사용될 수 있음

public Circle getMe(){ return this;}
PreviousWeek4(제어문)NextWeek6(상속)

Last updated 3 years ago

Was this helpful?