It 33

오버라이딩

오버 로딩의 한계를 해결하기 위해서는 다른 방법이 필요하다. 저번과 비슷한 프로그램을 만들었는데 역시나 다음과 같은 문제가 발생한다. 유닛이 늘어날수록 오버 로딩해야 할 메서드가 너무 많아진다는 점이다. 이 문제를 해결하기 위해서 "다형성"을 하면 된다. 자 그러면 이제 유닛들이 자유롭게 서로를 공격할 수 있게 될까? 지금 위와 같은 경우면 유닛들이 바라보는 타입이 프로토스 유닛이기 때문에 아무런 행위도 메모리에서 찾지 못한다. 자 그럼 위 문제를 해결했는데 위 코드의 결과를 보면 부모의 타입을 가지고 있는 u1객체가 부모 클래스와 질럿 클래스에서 둘 다 똑같은 이름으로 가지고 있는 "기본 공격()"메서드를 호출했는데 "질럿 메서드"가 나오는 것을 볼 수 있다. 위 경우와 같이 부모 클래스의 메서드명과 ..

JAVA,객체지향 2021.11.25

오버로딩과 오버로딩의 한계

Over loading = 과적재 클래스는 상태와 행위를 가질 수 있다. 이때 어떤 클래스가 행위(메서드)를 가지고 있는데 이름이 똑같은 행위(메서드)를 가지고 있다 하더라도 매개변수가 다르다면 같은 이름의 행위(메서드)를 선택적으로 사용하도록 허락해주는 기법이다. 그럼 오버로딩된 메서드를 호출을 할 때 상황에 따라서 유연하게 매개변수를 입력해 줄 수 있다. 왜 오버로딩이 객체지향에서 중요한 문법이냐면?! 사실 저렇게 하지 않고도 메서드를 하나 더 만들면 된다 하지만 왜 오버 로딩이란 것이 탄생하게 됐고 이 오버 로딩의 한계는 무엇일까? 오버 로딩의 한계 자 다음과 같은 프로그램을 만들었다. 위 프로그램의 단점이 무엇일까? 첫 번째로 자유도가 떨어진다. 전사는 궁수만 공격할 수 있고 궁수는 광전사만공격할..

JAVA,객체지향 2021.11.25

다형성

다형성의 사전적 의미는 다음과 같습니다. 좀 더 쉽게 설명을 하자면 홍길동이라는 가상의 인물의 직업이 요리사이다. 그럼 이 홍길동이란 인물을 java세상에 만들어 본다면 홍길동 클래스가 요리사라는 클래스를 상속한다. 이 둘이 상속이 가능한 이유는 홍길동 보고 요리사라고 물어보면 "네"라고 할 수 있고 요리사 보고 홍길동이니? 해도 "네"라고 할 수 있다. 즉 홍길동은 다양한 형태를 가지고 있는 것이다(다형성) 홍길동 extends 요리사 그럼 홍길동을 메모리에 올리고 싶어서 new 홍길동(); 을 하게 되면 메모리에 요리사와 홍길동이 같이 올라온다. 하지만 new요리사();로 요리사로 띄우게 되면 메모리에는 요리사만 올라온다. 위 그림처럼 new홍길동();하면 메모리에 홍길동 요리사가 뜨기때문에 new홍..

JAVA,객체지향 2021.11.21

클래스? 오브젝트? 인스턴스???

인스턴스 클래스는 설계도와 같은 역할을 한다. 신이 사람이라는 클래스라고 만들 때 기본적인 설계도만 만들어진 상태로 만들어 두고. 사람이라는 객체에 다양성을 위해서 new 해서 사람이 java세상에 태어날 때 생성자의 매개변수를 통해서 다양성을 제공받는다. new 해서 만들어질때 메모리에 heap공간에 뜨는데 이 new를 통해서 메모리에 뜬것들을 인스턴스라고 한다. 오브젝트 구체적인것(셀 수 있는 것) 영어에서는 물질 명사라고 한다. 그럼 이 구체적인것이 무엇이 있을까? 위 그림을 보면 의자 침대 탁자는 구체적이고 셀 수 있는 것들이지만 가구라는 것은 굉장히 추상적이다. 이런 것을 영어에서는 추상명사라고 한다. 가구는 실제 존재 할 수 없는 것이기 때문이다. 예를 들어서 집에 의자를 들일수는 있지만 가구..

JAVA,객체지향 2021.11.21

자료형이란?

자료형이란? 물건을 저장하기 위해 창고를 설계한다고 가정해 보자 그럼 마구잡이로 넣을 수 없으니 정리를 위해서 포장을 해야 한다. 포장을 할 때 사과라는 물건을 저장하는데 창고 2칸에 6개가 딱 맞고 딸기라는 물건을 저장하는데 창고 4칸에 10개가 들어가야 딱 맞게 저장이 된다 그럼 포장에 단위를 알 수 있다. 그럼 이제 창고에 들어올 물건의 양을 알아야 한다. 그래야 그 양에 맞춰서 창고에 칸을 마련해 놓을 수 있기 때문이다. java도 마찬가지다 자바도 프로그램을 시키려면 창고 설계가 필요하다고 생각하면 된다. java에서 포장단위는 8가지 타입으로 이미 정해져 있다. boolean = 1bit(bit는 포장단위) =2에 1승 = 2 = 참 or 거짓 int = 32bit =2에 32승 =42억 9천..

JAVA,객체지향 2021.11.18

SpringbootSecurity/RFC문서에 대한 개념

https://jwt.io/ JWT.IO JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. jwt.io 이 사이트로 가면 JWT에 대한 설명이 나온다. 어떤 암호화 방식을 쓰는지 어떻게 사용하는지 등등 잘 나와있다.(영어긴 하지만...) 그래서 여기에 적인 문서를 정리를 하기 위해서 포스팅을 한다. 그럼 JWT를 이해하기 전에 RFC문서가 뭔지 알아야 이해할 수 있다. 이 JWT는 RFC7519번 문서에 설명이 나오기 때문이다. RFC문서란? http라는 것은 미국에 벨연구소라는 곳이 있는며 여기서 월드 와이드 웹(WWW)이 나왔다. www가 뭐냐..

SpringbootSecurity 2021.09.04

SpringbootSecurity/Springboot로 네이버 로그인 해보기 (yml에서 provider 설정하기)

저번 포스팅에서 이어갑니다. provider OAuth2-Client라는 라이브러리를 사용하고 있는데 OAuthClient를 재공해 주는 provider 있는데 Spring은 구글, 페이스북, 트위터 등등을 제공해준다. 그럼 당연히 네이버나 카카오같은 각 나라마다의 포털사이트를 Spring을 다 제공해주기엔 너무 많기 때문에 대표적인 것만 있는 것이다. 그럼 이런 각 나라마다 포털사이트의 api를 사용하려면 그 포털사이트의 문서를 봐야 사용할 수 있다. 그럼 naverAPI를 받아오기 전에 yml설정부터 하면서 이해해야할 개념이 있다. 기본적으로 스프링 시큐리티가 OAuth2로그인을 사용할 때 OAuth2를 사용하기 위한 여러 가지 방식이 있다. Code방식 Client CredentialGrantTyp..

SpringbootSecurity 2021.09.01

SpringbootSecurity/Springboot로 구글로그인 해보기(3)/구글 로그인 및 자동 회원가입 진행 완료

저번 포스팅에서 이어집니다. PrincpalDetails를 만든 이유는 Authentication객체에 일반 로그인을 했을 경우의 타입과 oauth를 사용해서 로그인한 경우의 타입 이 두 가지 타입을 일치시키기 위해서이다. 그럼 이제 회원 oauth 회원가입을 해보자 회원가입 여기서 attributes가 가지고 있는 정보는 아래와 같다. getAttributes {sub=105617652356040885552, name=, given_name=, family_name= , picture=https://lh3.googleuserconent.com/a/AATXAJzvxBp9CVwqOqPeThYDMDJvNPxhu , email=@gmail.com , email_verified=true , locale=ko} ..

SpringbootSecurity 2021.08.29

SpringbootSecurity/Springboot로 구글로그인 해보기(2)/구글 회원 프로필 정보

저번 포스팅에서 이어갑니다. 이제 구글 로그인까지는 완료했는데 후처리가 필요하다. 구글 로그인 후처리 일반적으로 구글이 구글을 완료하면 어떻게 처리가 되는지 알아야 한다. 일단 로그인을 하게 되면 1. 코드 받기(인증) 2. 액세스 토큰(권한) 3. 권한을 통해서 사용자 프로필 정보를 가져온다. 4-1. 그 정보를 토대로 회원가입을 자동으로 진행시키기도 한다. 4-2. 예를 들어 쇼핑몰을 한다고 하면 기본적인 USER정보와 더해서 추가적인 집주소, 백화점몰->(VIP 등급, 일반등급)이 필요하다. TIP 구글 로그인이 완료가 되면 코드를 받는 것이 아니다. 무엇을 받냐면 액세스 토큰+사용자 프로필 정보까지 한 번에 다 받을 수 있다. Oauth2 clinet라이브러리에서 제공해주는 기능 일단 config..

SpringbootSecurity 2021.08.29