티스토리 뷰

cs

java 객체지향특징 Array, Linked List

짱쭈니어 2021. 11. 4. 17:25

 

 

컴공 취준생에게 유용한 링크들 정리

컴퓨터공학과 (예비)취준생들에게 도움이 될 것 같은 유용한 링크들을 모아봤어욤. sw 개발자 취업&이직 정보공유방의 공지와 구글링하면서 스타해놨던 저장소들입니다!

velog.io

(이 사이트를 참고해서 공부했습니다. )

 

 

 

컴포넌트, 모듈의 차이점

모듈: 가장 상위에 위치하는 구현의 단위, 실질적으로 구현이 된 단위

컴포넌트: 런타임 개체를 참조하는 단위, 실질적으로 동학하고 있는 개체

 

 

java란

 

Write once Run anywhere 라는 특성을 가진 완전 객체지향 언어

 

 

 

절차지향프로그래밍, 객체지향프로그래밍

 

절차지향프로그래밍: C, 함수를 이용한 프로그래밍, 절차적으로 실행이 아닌 함수 호출을 통해 재사용을 얻어내는것 ,

                  함수코드를 재사용

 

객체지향프로그래밍 : OOP(Object Oriented Programming)

java, 데이터와 데이터를 처리하는 메소드로 이루어진객체들이 상호작용하는 방식의 프로그래밍

(인간의 세계를 모방했다고 볼수 있을듯),   캡슐화, 상속, 다형성, 추상화  이라는 특징이 있다. 

 

 

 

객체지향적 설계원칙 SOLID

1.SRP: single Responsibility principle 단일책임원칙

클래스는 1개의 책임이있고 , 변경해야한다면 그 책임과 관련이 있어야 한다.

 

2.OCP: open closed principle 개방폐쇄 원칙

확장에는 open이나 변경에는  closed 이다.

기존의 코드를 변경하지 않으면서 기능을 추가할 수 있어야한다.

 

3. LSP: Liskov substitution principle 리스코프 치환원칙

부모객체를 자식객체로 변경하여도, 상위프로그램은 정상적동작이 필수이다.

즉 자식은 언제나 부모를 대신할 수 있어야한다는 점이다.

 

4. ISP: interface segregation principle 인터페이스 분리원칙

인터페이스는 인터페이스를 사용하는 client 기준으로 분리한다.

 

5. DIP: dependency inversion principle 의존 역전원칙 

자주변하는 것에 의존하지 말고, 변화가 없는것에 의존해라

구체적인 클래스에 의존하는 것이 아닌, 인터페이스나 추상클래스와 관계를 맺어라라는 뜻

 

 

 

 

 

객체지향의 특징

 

캡슐화 Encapsulation :  데이터, 데이터 처리하는 메소드를 하나로 묶은 것

정보은닉가능  information hiding : 캡슐화에서 나온 개념으로, 다른객체에게 자신의 정보를 숨기고,

자신의 메소드를 사용해 접근을 가능하게 하는 것

 추상화 Abstaraction: 여러 객체들의 공통된 특징을 도출해내는 것 -> 중복을 줄일 수 있다.

상속성 Inheritance : 상위클래스의 모든 속성, 연산을 하위클래스가 물려받는 것

다형성 Polymorphism:  동일한 변수, 함수가 메시지에 따라 다른의미로 응답되는 것 

                               오버로딩, 오버라이딩, 함수형 인터페이스로 구현이 가능하다

                               ex) 동일한 이름의 메소드여도, 매개변수 개수에 따라 다른 기능을 구현하기도 한다.

 

 

 

 

 

다형성 구현 오버로딩, 오버라이딩, 함수형 인터페이스

 

 

다형성(Polymorphism)이란?

객체 지향 패러다임의…

tecoble.techcourse.co.kr

 

 

오버로딩과 오버라이딩 차이와 예제

자바에서 다형성을 지원하는 방법으로 메서드 오버로딩과 오버라이딩이 있습니다. 오버로딩(Overloading) : 같은 이름의 메서드 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술

private.tistory.com

(참고했습니다.)

 

오버로딩 : 함수의 재정의 (함수명만 동일하면 된다)

class OverloadingTest{
	void cat() {
		System.out.println("매개변수 없음");
	}
	void cat(int a, int b) {
		System.out.println("매개변수 :"+a+","+b+"두개 있음");
	}
	void cat(String c) {
		System.out.println("매개변수 :"+c+"가 String형이다. ");
	}
}


public class Overloading {
	public static void main(String[] args) {
		OverloadingTest ot=new OverloadingTest();
		
		ot.cat();
		ot.cat(1,4);
		ot.cat("오버로딩예제");
	}
	

}

 

오버라이딩: 부모클래스 함수를 재정의 (함수명, 매개변수, 반환형 모두 동일해야한다)

 

class Parent{
	public String name;
	public int age;
	public void info() {
		System.out.println("부모이름은:"+name+"이고, 나이는 : "+age+"입니다.");
	}
}
class children extends Parent{
	String children_name;
	
	@Override
	public void info() {
		// 부모클래스에 있는 메소드를 재정의 오버라이드 
		super.info(); //자식클래스에서 부모클래스의 메소드를 사용하고자 할때 super 사용 
		System.out.println("아이의 이름은 :"+children_name+"입니다.");
	}
}

public class Overriding {
	public static void main(String[] args) {
		children child=new children();
		child.name="부모클래스 변수 사용가능";
		child.age=30;
		child.children_name="상속받은 child 클래스 변수도 사용가능";
		
		child.info(); 
		//오버라이드의 단점은 자식클래스에서 메소드를 재정의하기때문에 부모의 메소드를 사용하지 못한다는 점이다.
		//이 점을 보완하기위해 super라는 키워드를 사용한다. 이 키워드는 부모를 지칭하는것이라 봐도 된다. 
	}
		
}

(참고했습니다. )

 

Java8 - 함수형 인터페이스(Functional Interface) 이해하기

함수형 인터페이스는 1개의 추상 메소드를 갖고 있는 인터페이스를 말합니다. Single Abstract Method(SAM)라고 불리기도 합니다. 함수형 인터페이스를 사용하는 이유는 자바의 람다식은 함수형 인터페

codechacha.com

함수형 인터페이스  functional interface

 

함수형 인터페이스는 1개의 추상메소드를 갖고있는 인터페이스를 말한다.

public interface FunctionalInterface{
		public abstract void do(){};
        }

자바의 람다식은 함수형 인터페이스로만 접근이 가능하다.

즉, 함수형 인터페이스를 사용하는 것은 람다식으로 만든 객체에 접근하기 위함이다.

 

 

 

 

람다식 Lambda Expression

   람다식이란 함수를 하나의 식(expression)으로 표현하는 것이다

    함수를 람다식으로 표현하면, 메소드의 이름이 필요없어서, 익명함수의 한 종류이다.

(String name)-> System.out.println(name+"님 안녕하세요!");

이렇게 함수명이 따로 필요없이, 함수를 하나의 식으로 간결히 표현이 가능하다.

람다식을 사용하면 코드의 수를 줄이고, 가독성을 높일 수 있다.

 

 

 

Array, Linked List

 

Array 배열  =>  고정메모리 공간 

논리적 저장순서와 물리적 저장순서가 일치

메모리 공간상에서도 연속적으로 존재한다.

인덱스로 해당원소에 바로 접근이 가능하기에 random access 가 가능하다. ->O(1)이 소요된다.

 

삭제, 삽입 후에 다른 원소들을 shift가 필요하다->시간적 소요가 O(n)가 발생한다. ->이 점을 보완하기 위해 Linked List

 

Linked List 연결리스트  => 동적메모리공간

논리적 저장순서와, 물리적 저장순서가 일치하지 않는다

메모리 공간상에도 흩어져 있으며, 각각의 노드는 포인터로 다음노드와 연결이 되어있다.

사용자는 첫번째 노드위치만 알기에, 조회시에 O(n)이 소요된다.

삭제, 삽입에도 찾고, 작업하기위해 O(n)+O(n)이 소요된다. ->그래도 array 보다 성능이 좋다

 

단순 select를 할때는 인덱스로 접근이 가능한 Array를 사용하는게 좋지만,

LinkedList는 동적으로 메모리공간을 할당받기에 삽입, 삭제가 용이하다.

 

 

 

 

       

 

 

'cs' 카테고리의 다른 글

REST API  (0) 2022.01.14
알고리즘- 시간복잡도  (0) 2021.11.27
kmm에 대해서 kotlin multiplatform + mobile features  (0) 2021.07.19
깃허브 블로그 생성하기  (0) 2021.03.06
eclipse 이클립스 프로젝트 export, import  (0) 2021.01.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함