카테고리 없음

230109

Berylly 2023. 1. 18. 09:30

T.김동식

 

기본세팅

Book book1 = new Book(200, "개미");
Book book2 = new Book(200, "개미");

System.out.println("--값--");
System.out.println(book1);
System.out.println(book2);

System.out.println("--값비교--");
System.out.println(book1.bookNumber==book2.bookNumber);
System.out.println(book1.bookTitle==book2.bookTitle);

 

 

== & equals

System.out.println("--equals 주소값식별 @Override 가능--");
System.out.println(book1==book2); // 주소값 비교 false
System.out.println(book1.equals(book2)); //주소값 비교 false

 

 

equals @Override and instanceof

@Override
	public boolean equals(Object obj) {
		if(obj instanceof Book) { // Book에서 나온 오브젝트인가
			Book book = (Book)obj; // 강제형변환
			if(this.bookNumber == bookNumber) { 
				return true; // 값이 같으면 true
			}
			return false;
		}else {
			return false;
		}
	}
System.out.println(book1.equals(book2)); //값 비교 true

 

hashCode & identityHashCode

System.out.println("-- hashCode 객체식별 @Override 가능--");
System.out.println(book1.hashCode()); //객체를 식별하는 Integer 값 1413246829
System.out.println(book2.hashCode()); //객체를 식별하는 Integer 값 334203599
System.out.println("--고유한 hashCode를 리턴--");
System.out.println(System.identityHashCode(book1)); //객체를 식별하는 Integer 값 1413246829
System.out.println(System.identityHashCode(book2)); //객체를 식별하는 Integer 값 334203599

 

 

hashCode @Override  

@Override
public int hashCode() {
	return bookNumber;
}
System.out.println(book1.hashCode()); //객체를 식별하는 Integer 값 200
System.out.println(book2.hashCode()); //객체를 식별하는 Integer 값 200

 

 

 

concat

String a = "a";
String b = "b";
String c = "c";
System.out.println(a.concat(b)); // 값을 연결하다. ab
System.out.println(a.concat(b.concat(c))); // 값을 연결하다. abc

 

 

Integer.parseInt

문자열을 숫자로 변환

int num = Integer.parseInt("100");

 

 

 

String, StringBuffer, StringBuilder
문자열을 만들때/합칠때 새로운객체를 생성하지않아 메모리가 낭비되는것을 해결.

String             :  문자열 연산이 적고 멀티쓰레드 환경일 경우
StringBuffer    :  문자열 연산이 많고 멀티쓰레드 환경일 경우
StringBuilder   :  문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우

// 변수에 저장
String javasStr = new String("Java");

// 빌더에 저장
StringBuilder builder =  new StringBuilder(javasStr);
builder.append(" and"); 
builder.append(" android");
builder.append(" Pg is fun");
System.out.println(builder); // 출력

System.out.println(System.identityHashCode(javasStr)); //1316061703
System.out.println(System.identityHashCode(builder)); //854507466

 

 

@Override toString()

객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메소드

@Override
	public String toString() {
		return "x값은"+x+", y값은"+y;
	}
}

 

 

clone() 복제

1.throws 예외처리.
2.class에 implements Cloneable 처리.

* 예외처리(throws CloneNotSupportedException)가 main메소드에 추가된다.

public class Circle implements Cloneable{

@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}

}
Circle circle = new Circle(10, 20, 30); //원점은x값은10, y값은20값이고, 반지름은30입니다.
System.out.println(circle);//원점은x값은10, y값은20값이고, 반지름은30입니다.

Circle copyCircle = (Circle)circle.clone();//  복제
System.out.println(copyCircle);//원점은x값은10, y값은20값이고, 반지름은30입니다.

System.out.println(System.identityHashCode(circle));//334203599
System.out.println(System.identityHashCode(copyCircle)); //1372082959

 

 

Class.forName()

자바 리플렉션 API(Java Reflection API)의 일부
내부를 검사, 속성을 수정할 수 있다.

*자바 리플렉션 API: 동적 바인딩
 구체적인 클래스의 타입을 알지 못해도 클래스의 변수 및 메소드 등에 접근하게 해주는 API

public static void main(String[] args) throws ClassNotFoundException { 
//예외처리가 추가된다.

Person person = new Person();
Class pClass = person.getClass();
System.out.println(pClass.getName()); //object.Person 

Class pClass3=Class.forName("object.Person");
System.out.println(pClass3.getName());
System.out.println(pClass3.getName()); /object.Person
}

 

Class.forName()

실제 자바 Class를 이용해 테스트해보자.

public static void main(String[] args) throws ClassNotFoundException { 
Class strClass = Class.forName("java.lang.String");//java.lang.String에 진입한다.
Constructor[] arr1 = strClass.getConstructors();
for(Constructor i :arr1) {System.out.println(i);} //Constructors를 모두 찍어내라.
}
더보기

[출력결과]

public java.lang.String(java.lang.StringBuffer)
public java.lang.String(java.lang.StringBuilder)
public java.lang.String(byte[],int,int,java.nio.charset.Charset)
public java.lang.String(byte[],java.lang.String) throws java.io.UnsupportedEncodingException
public java.lang.String(byte[],java.nio.charset.Charset)
public java.lang.String(byte[],int,int)
public java.lang.String(byte[])
public java.lang.String(char[],int,int)
public java.lang.String(char[])
public java.lang.String(java.lang.String)
public java.lang.String()
public java.lang.String(byte[],int,int,java.lang.String) throws java.io.UnsupportedEncodingException
public java.lang.String(byte[],int)
public java.lang.String(byte[],int,int,int)
public java.lang.String(int[],int,int)

 

public static void main(String[] args) throws ClassNotFoundException { 
Class strClass = Class.forName("java.lang.String");
Method[] arr3 = strClass.getMethods();
for(Method i :arr1) {System.out.println(i);}
}
더보기

[출력결과]

public boolean java.lang.String.equals(java.lang.Object)
public int java.lang.String.length()
public java.lang.String java.lang.String.toString()
public int java.lang.String.hashCode()
public void java.lang.String.getChars(int,int,char[],int)
public int java.lang.String.compareTo(java.lang.String)
public int java.lang.String.compareTo(java.lang.Object)
public int java.lang.String.indexOf(int)
public int java.lang.String.indexOf(java.lang.String)
public int java.lang.String.indexOf(java.lang.String,int)
public int java.lang.String.indexOf(int,int)
public static java.lang.String java.lang.String.valueOf(int)
public static java.lang.String java.lang.String.valueOf(char[])
public static java.lang.String java.lang.String.valueOf(java.lang.Object)
public static java.lang.String java.lang.String.valueOf(boolean)
public static java.lang.String java.lang.String.valueOf(char[],int,int)
public static java.lang.String java.lang.String.valueOf(char)
public static java.lang.String java.lang.String.valueOf(double)
public static java.lang.String java.lang.String.valueOf(float)
public static java.lang.String java.lang.String.valueOf(long)
public char java.lang.String.charAt(int)
public int java.lang.String.codePointAt(int)
public int java.lang.String.codePointBefore(int)
public int java.lang.String.codePointCount(int,int)
public int java.lang.String.offsetByCodePoints(int,int)
public byte[] java.lang.String.getBytes(java.nio.charset.Charset)
public byte[] java.lang.String.getBytes(java.lang.String) throws java.io.UnsupportedEncodingException
public void java.lang.String.getBytes(int,int,byte[],int)
public byte[] java.lang.String.getBytes()
public boolean java.lang.String.contentEquals(java.lang.CharSequence)
public boolean java.lang.String.contentEquals(java.lang.StringBuffer)
public boolean java.lang.String.regionMatches(boolean,int,java.lang.String,int,int)
public boolean java.lang.String.regionMatches(int,java.lang.String,int,int)
public boolean java.lang.String.startsWith(java.lang.String,int)
public boolean java.lang.String.startsWith(java.lang.String)
public int java.lang.String.lastIndexOf(java.lang.String)
public int java.lang.String.lastIndexOf(java.lang.String,int)
public int java.lang.String.lastIndexOf(int,int)
public int java.lang.String.lastIndexOf(int)
public java.lang.String java.lang.String.substring(int,int)
public java.lang.String java.lang.String.substring(int)
public boolean java.lang.String.isEmpty()
public java.lang.String java.lang.String.replace(char,char)
public java.lang.String java.lang.String.replace(java.lang.CharSequence,java.lang.CharSequence)
public boolean java.lang.String.matches(java.lang.String)
public java.lang.String java.lang.String.replaceFirst(java.lang.String,java.lang.String)
public java.lang.String java.lang.String.replaceAll(java.lang.String,java.lang.String)
public java.lang.String[] java.lang.String.split(java.lang.String)
public java.lang.String[] java.lang.String.split(java.lang.String,int)
public static java.lang.String java.lang.String.join(java.lang.CharSequence,java.lang.CharSequence[])
public static java.lang.String java.lang.String.join(java.lang.CharSequence,java.lang.Iterable)
public java.lang.String java.lang.String.toLowerCase()
public java.lang.String java.lang.String.toLowerCase(java.util.Locale)
public java.lang.String java.lang.String.toUpperCase()
public java.lang.String java.lang.String.toUpperCase(java.util.Locale)
public java.lang.String java.lang.String.trim()
public java.lang.String java.lang.String.strip()
public java.lang.String java.lang.String.stripLeading()
public java.lang.String java.lang.String.stripTrailing()
public java.util.stream.Stream java.lang.String.lines()
public java.lang.String java.lang.String.repeat(int)
public boolean java.lang.String.isBlank()
public char[] java.lang.String.toCharArray()
public static java.lang.String java.lang.String.format(java.lang.String,java.lang.Object[])
public static java.lang.String java.lang.String.format(java.util.Locale,java.lang.String,java.lang.Object[])
public java.lang.Object java.lang.String.resolveConstantDesc(java.lang.invoke.MethodHandles$Lookup) throws java.lang.ReflectiveOperationException
public java.lang.String java.lang.String.resolveConstantDesc(java.lang.invoke.MethodHandles$Lookup)
public java.util.stream.IntStream java.lang.String.codePoints()
public boolean java.lang.String.equalsIgnoreCase(java.lang.String)
public int java.lang.String.compareToIgnoreCase(java.lang.String)
public boolean java.lang.String.endsWith(java.lang.String)
public java.lang.CharSequence java.lang.String.subSequence(int,int)
public java.lang.String java.lang.String.concat(java.lang.String)
public boolean java.lang.String.contains(java.lang.CharSequence)
public java.lang.String java.lang.String.indent(int)
public java.lang.String java.lang.String.stripIndent()
public java.lang.String java.lang.String.translateEscapes()
public java.util.stream.IntStream java.lang.String.chars()
public java.lang.Object java.lang.String.transform(java.util.function.Function)
public java.lang.String java.lang.String.formatted(java.lang.Object[])
public static java.lang.String java.lang.String.copyValueOf(char[],int,int)
public static java.lang.String java.lang.String.copyValueOf(char[])
public native java.lang.String java.lang.String.intern()
public java.util.Optional java.lang.String.describeConstable()
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()

 

 

new & newInstance

객체를 생성

newInstance의 경우 9 버전 이후로 deprecated(비추천) 되어 현재는 잘 사용하지는 않는다.
new 연산자로 바로 구현 클래스를 받아도 그 결과는 같다.

Person ps1 = new Person();
System.out.println(ps1);
Class pClass = Class.forName("object.Person"); //object.Person로 접근해
Person ps2 = (Person) pClass.newInstance(); // Person형 newInstance를 만든다.
System.out.println(ps2);

 

 

Python

 

클래스

 

함수세팅의 두가지 방법

class Park:
    def __init__(self, str1, str2):
        self.str1 = str1
        self.str2 = str2
    def name1(self):
        return self.str1+self.str2
    
    def name2(self, str1,str2 ):
        return str1+str2
parksanghee = Park("박", "상희")
print(parksanghee.name1()) #박상희
print(parksanghee.name2("박", "상희")) #박상희

 

 

사칙연산함수

class Calc2:
    #pass 아무것도 안할경우
    
    def __init__(self, num1, num2): #정의
        self.num1 = num1
        self.num2 = num2
    def add(self):
        return self.num1+self.num2
    def miu(self):
        return self.num1-self.num2
    def mul(self):
        return self.num1*self.num2
    def dev(self):
        return self.num1/self.num2
#객체를 만들어 출력
calc2 = Calc2(2, 3)
print(calc2.add()) #5
print(calc2.miu()) #-1
print(calc2.mul()) #6
print(calc2.dev()) #0.6666666666666666

 

 

클래스상속 (부모)

#class의 상속
class Calc3(Calc2):
    def zegob(self):
        return self.num1**self.num2
#num1, num2에 대한 설정이 따로 없어도 상속으로 잘 출력됨을 확인할 수 있다.
calc3 = Calc3(2, 3)
print(calc3.zegob()) #8

 

 

뉴스가져오기

from urllib.request import urlopen #urllib 패키지, 인터넷 리소스 가져오기
from bs4 import BeautifulSoup # 정보식별을 도와주는 라이브러리

url = 'https://www.dailian.co.kr/news/view/1190364/?sc=Naver'
soup = BeautifulSoup(urlopen(url).read(), "lxml")
print(soup.title.get_text()) #title을 가져올 수 있다.
print(soup.find("h2","title").text+"\n\n")

print(soup.find("div","inner-subtitle").text+"\n\n") #서브타이틀 class를 찾아내어 추출
soup.find("div","flexwrap").decompose() # 쓸데없는 태그를 찾아내어 삭제
print(soup.find("div","article").text+"\n\n") # 본문 class를 찾아내어 공정된 본문추출

 

 

전세계웹사이트순위 가져오기

from urllib.request import urlopen
from bs4 import BeautifulSoup

response = urlopen("https://www.similarweb.com/top-websites/")
#HTTP Error 403: Forbidden 접근이 막힌 상황
import requests
status = requests.get(url, headers={'User-Agent':'Mozila/5.0'})
status.text

# 진입은 가능해졌지만, 데이터베이스 형태로 데이터를 저장해,
# 화면상에 보이는 데이터를 가져오는것이 불가한 상황
#해당 페이지를 html로 저장후, open해 BeautifulSoup를 거쳐 변수에 넣고
with open('C:/ai2/230109/rank.html', encoding='utf-8') as f:
    text=f.read()
soup = BeautifulSoup(text, 'lxml')
#원하는 구간의 class을 찾아 list에 할당후
list = soup.find_all('span',{'class' : 'topRankingGrid-titleName'})
for i in(list):
    print(i.text) #for문을 돌려 출력해낸다.

 

 

영화평점가져오기

from urllib.request import urlopen
from bs4 import BeautifulSoup

#urlopen후 read읽어 article변수에 넣은후, BeautifulSoup를 통해 soup변수에 한번 더 저장
article = urlopen("https://movie.naver.com/movie/point/af/list.naver").read()
soup = BeautifulSoup(article, "lxml")
print(soup.title.get_text()+"\n\n") #title을 출력 후

#평점구간을 찾아내어 list에 할당해
list = soup.find_all("td", {'class':"title" })
for i in (list):
    print(i.text) #for문으로 출력한다.