Back End/JAVA 13

[Java] 객체지향의 설계 원칙(SOLID)

S : SRP (Single Response Principle) - 단일책임원칙 : 한 클래스는 반드시 하나의 책임만을 가지고 있어야 한다. => 책임을 캡슐화. O : OCP (Open Closed) - 개방/폐쇄원칙 : 소프트웨어는 확장에는 열려있어야하고 변경에는 닫혀있어야한다. => 기존 코드를 변경하지 않고 기능을 추가가능하도록 설계, 추상화&다형성 L : LSP (Liskov Substitution) - 리스코프 치환 원칙 : 상위타입은 하위타입으로 대체 가능해야한다. => 다형성과 확장성을 극대화 I : ISP (Interface Segregation) - 인터페이스 분리 원칙 : 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다. => SRP와 ISP는 같은 문제에 대..

Back End/JAVA 2022.05.21

[Java] 컬렉션(Collection)

List 인터페이스 - 순서가 있는 데이터의 집합 - 중복을 허용 - ArrayList, LinkedList, Stack, Vector 등 Set 인터페이스 - 순서를 유지하지 않는 데이터의 집합 - 중복을 허용하지 않음 - HashSet, TreeSet 등 Map 인터페이스 - Key와 Value의 쌍으로 이뤄진 데이터의 집합 - 순서를 유지하지 않음 - Key는 중복을 허용하지 않고, Value는 중복을 허용 - HashMap, TreeMap, Hashtable, Properties 등 LinkedList 배열의 단점 1. 크기를 변경할 수 없다. 변경하려면 새로운 배열을 생성해서 데이터를 복사해야한다. - 실행속도를 향상시키기 위해서는 충분히 큰 크기의 배열으르 생성해야 하므로 메모리가 낭비된다. ..

Back End/JAVA 2022.05.21

[Java] String 클래스와 StringBuffer, StringBuilder

문자열을 위한 클래스. 변경불가능한(immutable) 클래스 문자열을 저장하기 위해서 문자형 배열 참조변수( char[ ] ) value를 인스턴스 변수로 정의해놓고 있다. 인스턴스 생성시 생성자의 매개변수로 입력받는 문자열은 이 인스턴스 변수(value)에 문자형 배열(char[ ])이 저장된다. abcd를 저장한다면 char[ ] 안에 [a,b,c,d] 가 들어가있는 상태로 value가 된다. 한번 생성된 String 인스턴스가 갖고 있는 문자열은 읽어 올 수만 있고, 변경할 수는 없다. String = "a"; String = "b"; a = a + b; 위와 같이 문자열을 + 연산자로 결합하는 경우, 인스턴스 내의 문자열이 바뀌는 것이 아니라 a가 참조하는 주소가 "ab"라는 새로운 문자열이 담..

Back End/JAVA 2022.05.20

[Java] 예외처리(Exception)

프로그램 오류 컴파일 에러 : 컴파일(클래스파일로 바꾸는 과정) 시 발생하는 에러 런타임 에러 : 실행 시 발생하는 에러 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 런타임(실행) 시 발생할 수 있는 프로그램 오류를 에러(error)와 예외(exception)으로 구분할 수 있다. 런타임 에러를 방지하기 위해서 실행 중 발생할 수 있는 모든 경우의 수를 고려하여 대비하는 행위가 필요하다. 에러(Error) - 메모리부족(OutOfMemoryError)이나 StackOverflowError와 같이 발생하면 복구할 수 없는 심각한 오류 *StackOverflowError : Stack 영역의 메모리가 지정된 범위를 넘어갈 때 발생 - 코드로 수습 불가능. 코드로 메모리를 늘려줄 순 없다. 예외..

Back End/JAVA 2022.05.19

[Java] 객체지향 프로그래밍 정리 4

💡 추상클래스(abstract class) 미완성 설계도에 비유할 수 있다. 내부에 메서드를 가지고 있긴 하지만, 이또한 추상메서드이기 때문에 이름만 정의되어 있을 뿐 기능이 담겨 있지 않다. - 추상클래스로 인스턴스를 생성 할 수 없다. - 상속을 통해서 자손클래스에 의해서 완성가능. 상속받아서 오버라이딩을 통해 메서드에 기능부여해서 사용가능 - 클래스에 어떠한 틀을 만들어 준다고 생각한다. - 실생활에 비유해보면 반찬통이라 생각할 수 있을 것 같다. 안에 내용을 담을 수 있는 용기만 제공하고, 그걸 사서 안에 뭘 담느냐에 따라 다른 반찬통이 되는 것과 비슷하다 생각한다. 추상화 : 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업, 상속계층도로 올라갈수록 심해짐(공통화) 구체화 : 상속을 통해 ..

Back End/JAVA 2022.05.19

[Java] 객체지향 프로그래밍 정리 3

💡 상속 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것. 장점 : 코드의 재사용성을 높이고, 코드의 중복을 제거하여 생산성과 유지보수에 크게 기여함 -> 적은양의 코드로 새로운 클래스를 작성하고 코드를 공통적으로 관리할 수 있기 때문. Java는 클래스의 다중상속 불가. 💡 오버라이딩(Overriding) 조상클래스로부터 상속받은 메서드의 내용을 변경하는 것. 자손클래스에서 오버라이딩의 조건: - 조상클래스의 메서드와 이름이 같아야 한다. - 매개변수가 같아야한다. - 반환타입이 같아야 한다. 위처럼 선언부가 서로 일치해야 하지만, 접근제어자와 예외는 제한된 조건하에 변경 가능하다. 1. 접근제어자는 조상클래스의 메서드보다 좁은 범위로 변경 불가. (ex) protected -> private ..

Back End/JAVA 2022.05.18

[Java] 객체지향 프로그래밍 정리 2

💡 클래스 메서드(static)와 인스턴스 메서드 - 메서드 앞에 static이 붙어 있는 메서드를 클래스 메서드라 한다. - 인스턴스 메서드는 인스턴스 변수와 관련된 작업을 하는, 즉 메서드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드이다. - 인스턴스와 관계없는(인스턴스 변수나 인스턴스 메서드를 사용하지 않는) 메서드를 클래스 메서드(static)로 정의한다. - 클래스 변수(static)는 인스턴스를 생성하지 않아도 사용가능하며, 인스턴스 변수를 사용할 수 없다. 멤버변수 중 공통된 값을 유지해야하는 것이 있다면 static을 붙여준다. 메서드 중 인스턴스 변수 또는 메서드를 사용하지 않는다면 static을 붙여준다. 💡 클래스 멤버(변수와 메서드)와 인스턴스 멤버의 참조&호출 publi..

Back End/JAVA 2022.05.16

[Java] 객체지향 프로그래밍 정리 1

💡 객체지향언어 1. 코드의 재사용성이 높다. : 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다. 2. 코드의 관리가 용이하다. : 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다. 3. 신뢰성이 높은 프로그래밍을 가능하게 한다. : 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다. 재사용성, 유지보수, 중복된 코드의 제거가 핵심! 💡 클래스와 객체 객체 : 클래스에 정의된 내용대로 메모리에 생성된 것. 인스턴스 : 클래스로부터 만들어진 객체 -> 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화 객체는 모든 인스턴스를 대표하는 포괄적인 의미 클래스 ----(인스..

Back End/JAVA 2022.05.15

[Java] Stream과 for-loop

위 문제를 푸는데도 생각보다 시간이 많이 걸렸다. 이정도면 java를 진짜 못한다고 봐야할지도.. 웹프로그램 짜는게 더 재밌는 것 같은건 아직 제대로 된걸 겪어보지 않아서 인가보다 ㅎㅎ 풀고나니까 다른 풀이 중에 너무 코드길이차이가 많이 나는 풀이 가 있더라 Java8에서 도입된 Stream을 사용한 풀이법이다. 특징에서도 나오고, 위에서 봐도 훨씬 간결한 코드로 작성할 수 있다. (물론, 내 오른쪽 비 효율적으로 for - if문을 쓴건 내 실력이 부족해서 저렇게 푼거지, 더 짧게 푸는 사람들도 있더라) 근데, 찾아보다보면 Stream이 for-loop에 비해 연산속도가 현저히 느리다는 글이 많다. https://pamyferret.tistory.com/49 for문 보다 Stream API가 느리지만..

Back End/JAVA 2022.05.11

[Java] int 자료형의 Overflow

https://programmers.co.kr/learn/courses/30/lessons/12943 코딩테스트 연습 - 콜라츠 추측 1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. 1-1. 입력된 수가 짝수라면 2 programmers.co.kr 간단한 연습문제 풀이 중 예상치 못한 에러를 만났다. 626331이란 정수를 콜라츠추측으로 연산하는 문제인데, 이 쉬운 문제가 통과가 되지 않는다. 500번이상이면 -1 이고, 500번 이하면 통과인데 왜 488을 return하는지 이해할 수 없다. 홀수일때 짝수일때 연산을 큰숫자로 반복해서 하다보니 int형의 Overflow가 발..

Back End/JAVA 2022.05.11